Source file Identity.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
open Signatures
open Derived

type r

external to_rea : 'a -> (r, 'e, 'a) s = "%identity"
external of_rea : (r, 'e, 'a) s -> 'a = "%identity"

class ['D] monad =
  object (d : 'D)
    inherit [r, 'D] monad'd
    method pure' = to_rea
    method bind' xI xyI = xyI (of_rea (xI d)) d
  end

let monad = new monad