Signed-off-by: Jim Pryor <profjim@jimpryor.net>
type `int -> int`.
type 'a reader = (int -> int) -> 'a;; (* mnemonic: e for environment *)
- let reader_unit (x : 'a) : 'a reader = fun _ -> x;;
- let reader_bind (u: 'a reader) (f : 'a -> 'c reader) : 'c reader = fun e -> f (u e) e;;
+ let reader_unit (a : 'a) : 'a reader = fun _ -> a;;
+ let reader_bind (u: 'a reader) (f : 'a -> 'b reader) : 'b reader = fun e -> f (u e) e;;
It's easy to figure out how to turn an `int` into an `int reader`:
- let int2int_reader (x : 'a): 'b reader = fun (op : 'a -> 'b) -> op x;;
+ let int2int_reader (x : 'a) : 'b reader = fun (op : 'a -> 'b) -> op x;;
int2int_reader 2 (fun i -> i + i);;
- : int = 4