The same as S except the monad type has three arguments. The second and third are composed across all computation.
include Syntax_indexed with type (a, i, j) t := (a, i, j) tmodule Let_syntax : sig ... endmodule Monad_infix : Infix_indexed with type (a, i, j) t := (a, i, j) tval return : 'a ‑> ('a, 'i, 'i) t