# module SM = S.T(Maybe_monad);;
# MS.(run (elevate (S.puts succ) >> zero () >> elevate S.get >>= fun cur -> unit (cur+10) )) 0;;
- : int option * S.store = (None, 1)
+ # MS.(run (elevate (S.puts succ) >> zero () >> elevate (S.put 5) )) 0;;
+ - : unit option * S.store = (None, 1)
Although we have a wrapped `None`, notice that the store (as it was at the point of failure) is still retrievable.
# LL.(run(plus (unit 1) (unit 2) >>= fun i -> plus (unit i) (unit(10*i)) ));;
- : ('_a, int) LL.result = \[[1; 10; 2; 20]]
# LL.(run(plus (unit 1) (unit 2) >>= fun i -> elevate L.(plus (unit i) (unit(10*i)) )));;
- - : ('_a, int) LL.result = \[[1; 2]; [1; 20]; [10; 2]; [10; 20]]
+ - : ('_a, int) LL.result = [[1; 2]; [1; 20]; [10; 2]; [10; 20]]