Skip to content

Instantly share code, notes, and snippets.

View hallski's full-sized avatar

Mikael Hallendal hallski

View GitHub Profile
func spaces(n: Int) -> String {
return reduce(0..<max(0, n), "") { r, _ in r + " " }
}
init() {
view = {
frame = CGRect()
return UIView(frame: frame)
}()
}
extension Optional {
func both_then<T, U>(_ other: Optional<U>, f: (Wrapped, U) -> T) -> Optional<T> {
guard let a = self, let b = other else { return nil }
return f(a, b)
}
func neither<T>(_ other: Optional<T>) -> Bool {
return self == nil && other == nil
}
@hallski
hallski / zip.js
Last active November 13, 2017 20:08
Javascript implementation of `zip` that works with Iterables.
/**
* Uses the `produce` function to produce values until the `predicate` returns false.
* If supplied, each value is transformed by `transform` before being yielded.
*
* @param {Function} produce produces the next value
* @param {Function} predicate return true if the production should continue
* @param {Function} transform transforms the produced value, defaults to identity
*/
function* produceWhile(produce, predicate, transform = value => value) {
while(true) {
@hallski
hallski / gcf-async.js
Last active November 15, 2017 23:06
Google Cloud Function using es6-async
const makeAsync = require('es6-async')
const timeout = (milliseconds) => new Promise(resolve => setTimeout(resolve, milliseconds))
const random = () => Promise.resolve(Math.random())
const asyncFunc = makeAsync(function* () {
yield timeout(1000)
return yield random()
})