Parameters
Signature
val monadise : (('a -> 'b) -> 'c) -> ('a -> 'b m) -> 'c mThe 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 mval monadise_3 :
(('a1 -> 'a2 -> 'a3 -> 'b) -> 'c) ->
('a1 -> 'a2 -> 'a3 -> 'b m) ->
'c mval monadise_4 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) ->
'c mval monadise_5 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) ->
'c mAdditional 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 mval monadise_1_2 :
(('a -> 'b) -> 'c1 -> 'c2 -> 'd) ->
('a -> 'b m) ->
'c1 ->
'c2 ->
'd mval monadise_1_3 :
(('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) ->
('a -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'd mval monadise_1_4 :
(('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) ->
('a -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'd mval monadise_1_5 :
(('a -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) ->
('a -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'c5 ->
'd mval monadise_2_1 :
(('a1 -> 'a2 -> 'b) -> 'c -> 'd) ->
('a1 -> 'a2 -> 'b m) ->
'c ->
'd mval monadise_2_2 :
(('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'd) ->
('a1 -> 'a2 -> 'b m) ->
'c1 ->
'c2 ->
'd mval monadise_2_3 :
(('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) ->
('a1 -> 'a2 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'd mval monadise_2_4 :
(('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) ->
('a1 -> 'a2 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'd mval monadise_2_5 :
(('a1 -> 'a2 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) ->
('a1 -> 'a2 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'c5 ->
'd mval monadise_3_1 :
(('a1 -> 'a2 -> 'a3 -> 'b) -> 'c -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'b m) ->
'c ->
'd mval monadise_3_2 :
(('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'b m) ->
'c1 ->
'c2 ->
'd mval monadise_3_3 :
(('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'd mval monadise_3_4 :
(('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'd mval monadise_3_5 :
(('a1 -> 'a2 -> 'a3 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'c5 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'c5 ->
'd mval monadise_4_1 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) ->
'c ->
'd mval monadise_4_2 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) ->
'c1 ->
'c2 ->
'd mval monadise_4_3 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'd mval monadise_4_4 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'c4 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'c4 ->
'd mval 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 mval monadise_5_1 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) ->
'c ->
'd mval monadise_5_2 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) ->
'c1 ->
'c2 ->
'd mval monadise_5_3 :
(('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b) -> 'c1 -> 'c2 -> 'c3 -> 'd) ->
('a1 -> 'a2 -> 'a3 -> 'a4 -> 'a5 -> 'b m) ->
'c1 ->
'c2 ->
'c3 ->
'd mval 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 mval 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