ootAI/reader.ml
Aly 73c1a485fb Switch decoding over to a Monad for portability
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.
2021-04-02 15:13:54 -07:00

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