

@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
