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
