Skip to content

Instantly share code, notes, and snippets.

@ukitaka
Created July 28, 2017 06:07
Show Gist options
  • Save ukitaka/22afb8f300bca7de092ef6043bc787c4 to your computer and use it in GitHub Desktop.
Save ukitaka/22afb8f300bca7de092ef6043bc787c4 to your computer and use it in GitHub Desktop.
LReader (LIOのReader版)
struct LReader<S1, S2, E, A> {
let run: (E) -> A
init(_ run: @escaping (E) -> A) {
self.run = run
}
func map<B>(_ f: @escaping (A) -> B) -> LReader<S1, S2, E, B> {
return LReader<S1, S2, E, B> { env in f(self.run(env)) }
}
func flatMap<B, S3>(_ f: @escaping (A) -> LReader<S2, S3, E, B>) -> LReader<S2, S3, E, B> {
return LReader<S2, S3, E, B> { env in f(self.run(env)).run(env) }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment