At some point this may run on BizHawk so that I can draw information instead of having the very limited Dolphin text. I should really start working on my own Amulet prelude... There's lots of stuff from cats that I miss here.
19 lines
482 B
OCaml
19 lines
482 B
OCaml
open import "prelude.ml"
|
|
|
|
type reader 'r 'a = Reader of ('r -> 'a)
|
|
|
|
let r_run (Reader f) r = f r
|
|
|
|
instance functor (reader 'r) begin
|
|
let f <$> (Reader g) = Reader (f # g)
|
|
end
|
|
|
|
instance applicative (reader 'r) begin
|
|
let pure x = Reader (const x)
|
|
let (Reader rab) <*> (Reader ra) = Reader (fun r -> rab r (ra r))
|
|
end
|
|
|
|
instance monad (reader 'r) begin
|
|
let (Reader ra) >>= arb = Reader (fun r -> r_run (arb (ra r)) r)
|
|
let join (Reader f) = Reader (fun r -> r_run (f r) r)
|
|
end
|