Module type Monadise.S

type 'a m
val monadise : (('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.

Variations

Everything can be derived from monadise. However, to save the user some gymnasics, we provide a bunch of helpers for functions with different numbers of arguments.

Action arguments

These helpers come in the form monadise_<n> where <n> is the number of arguments of the action. They are provided for <n> up to 5. For instance, monadise would be monadise_1.

val monadise_2 : (('a1 -> 'a2 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'b m) -> 'c m
val monadise_3 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c m
val monadise_4 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c m
val monadise_5 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c m

Additional arguments

These helpers come in the form monadise_<n>_<m> where <n> is the number of arguments of the action, and <m> is the number of additional arguments to the function. They are provided for <n> and <m> up to 5. For instance, you would use monadise_1_1 on List.map and monadise_2_2 on List.fold_left.

val monadise_1_1 : (('a -> 'b) -> 'c -> 'd) -> ('a -> 'b m) -> 'c -> 'd m
val monadise_1_2 : (('a -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'd m
val monadise_1_3 : (('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val monadise_1_4 : (('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val monadise_1_5 : (('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m
val monadise_2_1 : (('a1 -> 'a2 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c -> 'd m
val monadise_2_2 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val monadise_2_3 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val monadise_2_4 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val monadise_2_5 : (('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) -> ('a1 -> 'a2 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd m
val monadise_3_1 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c -> 'd m
val monadise_3_2 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val monadise_3_3 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val monadise_3_4 : (('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd m
val monadise_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 monadise_4_1 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c -> 'd m
val monadise_4_2 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val monadise_4_3 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) -> 'c1 -> 'c2 -> 'c3 -> 'd m
val monadise_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 monadise_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 monadise_5_1 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c -> 'd m
val monadise_5_2 : (('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'd) -> ('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) -> 'c1 -> 'c2 -> 'd m
val monadise_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 monadise_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 monadise_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