継続モナドその2
APIをFutureで返す。bindはとりあえず省略。
@interface Future<V> : NSObject - (void)get:(void(^)(V))cb; @end @interface API<I,O> : NSObject - (Future<O> *)getAPI:(I)input; @end typedef void(^CallBack)(id); typedef void(^CPS)(CallBack); @interface Future() @property (nonatomic) CPS cps; @end @implementation Future - (instancetype)init:(CPS)cps { self = [super init]; if (self) { self.cps = cps; } return self; } - (void)get:(void (^)(id))cb { self.cps(cb); self.cps = nil; } @end @implementation API - (Future *)getAPI:(id)input { CPS cps = ^(CallBack cb) { return cb(input); }; Future *future = [[Future alloc] init:cps]; return future; } @end