Module Monadise.Option

type 'a m = 'a option
val lift : (('a -> 'b) -> 'c) -> ('a -> 'b m) -> 'c m

The core function of this library. Takes a higher-order function consuming a direct-style action, and makes it into a function consuming a monadic action for the given monad.

val run : (unit -> 'a) -> 'a m

Set up the context in which to call yield. It is safe, although useless, to nest this function.

val yield : 'a m -> 'a

Transforms a monadic value into a direct value. This only works in the context of run, without which you will get a runtime exception Stdlib.Effect.Unhandled(Yield(_))

val lift_2 : (('a1 -> 'a2 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'b m) -> 'c m
val lift_3 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c m
val lift_4 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c m
val lift_5 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c m
val lift_1_1 : (('a -> 'b) -> 'c -> 'd) -> ('a -> 'b m) -> 'c -> 'd m
val lift_1_2 : (('a -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'd m
val lift_1_3 : (('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val lift_1_4 : (('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val lift_1_5 : (('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m
val lift_2_1 : (('a1 -> 'a2 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c -> 'd m
val lift_2_2 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val lift_2_3 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val lift_2_4 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val lift_2_5 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m
val lift_3_1 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c -> 'd m
val lift_3_2 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val lift_3_3 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val lift_3_4 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val lift_3_5 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m
val lift_4_1 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c -> 'd m
val lift_4_2 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val lift_4_3 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val lift_4_4 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val lift_4_5 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m
val lift_5_1 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c -> 'd m
val lift_5_2 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val lift_5_3 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val lift_5_4 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val lift_5_5 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m