int (^myBlock)(int) = ^(int num) {
    return num * multiplier;
};
// for comparison
int (*fcnptr)(int);

int d = i % 10;
repeat(10, ^{ putc('0' + d);
});


void (^block)(void);
typedef void (^vstr_t)(char *);
typedef void (^workBlk_t)(void);

void AllLinesInFile(char *f, vstr_t block)
{
    FILE *fp = fopen(f, "r");

    if (!fp)
    {
        return;
    }
    char line[1024];
    while (fgets(line, 1024, fp))
    {
        block(line);
    }
    fclose(fp);
}


@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;
}

// 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
