I hereby claim:
- I am JadenGeller on github.
- I am jaden (https://keybase.io/jaden) on keybase.
- I have a public key whose fingerprint is CD7E 9E0B AE92 1CDB EBD9 3AFB 5989 E3D5 A174 FDD4
To claim this, I am signing this object:
I hereby claim:
To claim this, I am signing this object:
/* | |
* attempt takes a function that does not accept optional values | |
* and returns a new function that will work as usual with non-optional values | |
* and return nil when passed an optional value | |
*/ | |
func attempt<T,U>(f: T -> U)-> T? -> U? { | |
return { y in | |
if let x = y { | |
return f(x) |
/* | |
* chain takes in any number of 1-argument functions as arguments | |
* and returns a function that executes each function in order | |
*/ | |
func chain<T>(all: T -> () ...) -> T -> () { | |
return { x in | |
for f in all { f(x) } | |
} | |
} |
/* | |
* coalesce takes in a list of optional values | |
* and returns the first one that is not nil | |
*/ | |
func coalesce<T>(all: @autoclosure () -> T? ...) -> T? { | |
for f: () -> T? in all { | |
if let x = f() { return x } | |
} | |
return nil |
/* | |
* Returns the default value whenever the primary value is nil | |
* Otherwise returns the primary value | |
*/ | |
func unwrap<T>(primaryValue: T?, defaultValue: T) -> T { | |
if let value = primaryValue { return value } | |
else { return defaultValue } | |
} | |
// Examples |
#import <objc/runtime.h> | |
Class randomClass(){ | |
int numClasses = objc_getClassList(NULL, 0); | |
Class *classes = calloc(sizeof(Class), numClasses); | |
objc_getClassList(classes, numClasses); | |
Class randomClass = *(classes + arc4random_uniform(numClasses)); | |
free(classes); | |
return randomClass; | |
} |
/* | |
* Allows you to offset offset a generator | |
* and loop back around to the initial values | |
*/ | |
struct OffsetGenerator<G : GeneratorType> : GeneratorType { | |
var generator: G | |
var skipped = Array<G.Element>() | |
init(generator: G, var offset: Int){ | |
self.generator = generator |
/* | |
* Allows iteration over pairs of a series | |
* This is useful for comparing or performing actions on | |
* adjacent items in an array | |
*/ | |
struct PairingGenerator<Generator: GeneratorType>: GeneratorType { | |
var generator: Generator | |
var previous: Generator.Element? | |
let first: Generator.Element? |
// Imagine we have a function that curries | |
// That is, multiply takes in an integer a | |
// and returns a fuction that takes in another | |
// integer b that will return a * b | |
func multiply(a: Int) -> Int -> Int { | |
println("I got the first thing") | |
return { b in | |
println("I got the second thing") | |
return a * b | |
} |
// We define a Y function such that we can use recursion within an anonymous closure | |
// Note that this function Y is not a combinator because it recursively refers to itself | |
// There's not much reason to have an actual combinator in Swift, so we're not going to | |
// worry about it, it's just as useful. | |
/* | |
* Takes as input a function that takes in a function and returns a function of the same type | |
* and returns a function of that return type by feeding that function back into itself | |
* infinite times. Note that we use a closure to guard looping due to applicative order evaluation. |