Make_indexed.X
Indexed monad, in the style of Atkey. The second and third parameters are composed across all computation. To see this more clearly, you can look at the type of bind:
val bind : ('a, 'i, 'j) t -> f:('a -> ('b, 'j, 'k) t) -> ('b, 'i, 'k) t
and isolate some of the type variables to see their individual behaviors:
val bind : 'a -> f:('a -> 'b ) -> 'b
val bind : 'i, 'j -> 'j, 'k -> 'i, 'k
For more information on Atkey-style indexed monads, see:
Parameterised Notions of Computation Robert Atkey http://bentnib.org/paramnotions-jfp.pdf