1
1
mirror of https://github.com/github/semantic.git synced 2025-01-01 19:55:34 +03:00

Implement iter as a method.

This commit is contained in:
Rob Rix 2015-10-06 11:04:14 -04:00
parent c0edc77185
commit 8226285153

View File

@ -21,6 +21,12 @@ public enum Free<A, B> {
}
}
public func iter(transform: Syntax<B, A> -> B) -> B {
return analysis(
ifPure: id,
ifRoll: { transform($0.map { Free.iter($0)(transform) }) })
}
// MARK: Functor
@ -71,10 +77,3 @@ extension Free where A: Hashable, B: Hashable {
return hash(ifPure: Hash.init, ifRoll: Hash.init)
}
}
public func iter<A, B>(transform: Syntax<B, A> -> B)(_ free: Free<A, B>) -> B {
return free.analysis(
ifPure: id,
ifRoll: { transform($0.map(iter(transform))) })
}