 }
 
 // (A1, A2) -> R
-public func weakify<T: AnyObject, A1, A2, R>(object: T, block: (T) -> (A1, A2) -> R?) -> (A1, A2) -> R? {
+public func weakify<T: AnyObject, A1, A2, R>(object: T, _ block: (T) -> (A1, A2) -> R?) -> (A1, A2) -> R? {
     weak var weakObject = object
     return { (a1, a2) in
         if let strongObject = weakObject {

}

// () -> R
public func weakify<T: AnyObject, R>(object: T, block: (T) -> () -> R?) -> () -> R? {
    weak var weakObject = object
    return {
        if let strongObject = weakObject {

// produces a block that captures self weakly from self + unbound method

// () -> Void
public func weakify<T: AnyObject>(object: T, _ block: (T) -> () -> Void) -> () -> Void {
    weak var weakObject = object
    return {
        if let strongObject = weakObject {
