#import "NSSet+Functional.h"

@implementation NSSet (Functional)

- (BOOL)contains:(BOOL (^)(id))predicate {
    for (id object in self) {
        BOOL isPredicateSatisfied = predicate(object);
        if (isPredicateSatisfied) { return YES; }
    }
    return NO;
}

- (NSSet *)filtered:(BOOL (^)(id))isIncluded {
    NSMutableSet *result = [NSMutableSet new];
    for (id object in self) {
        if (isIncluded(object)) {
            [result addObject:object];
        }
    }
    return result;
}

- (NSSet *)map:(id (^)(id))transform {
    NSMutableSet *result = [NSMutableSet new];
    for (id object in self) {
        id transformedObject = transform(object);
        [result addObject:transformedObject];
    }
    return result;
}

@end