

@implementation NSArray (WWDC)
- (NSArray *)map:(id (^)(id))xform {
    id result = [NSMutableArray array];
    for (id elem in self)
        [result addObject:xform(elem)];
    return result;
}

- (NSArray *)collect:(BOOL ( ^ )(id))predicate {
    id result = [NSMutableArray array];
    for (id elem in self)
        if (predicate(elem))
            [result addObject:elem];
    return result;
}

- (void)each:(void (^)(id object))block {
    [self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        block(obj);
    }];
}

// corner case: block literal in use with return type
id longLines = [allLines collect: ^ BOOL (id item) {
    return [item length] > 20;
}];

// corner case: block literal in use with return type
id longLines = [allLines collect: ^ BOOL* (id item) {
    return [item length] > 20;
}];

@end

// 1. block literal: ^{ ... };
// 2. block declaration: return_t (^name) (int arg1, int arg2, ...) NB: return_t is optional and name is also optional
// 3. block inline call ^ return_t (int arg) { ... }; NB: return_t is optional
