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) t
module Let_syntax : sig ... end
module Monad_infix : Infix_indexed with type (a, i, j) t := (a, i, j) t
val return : 'a ‑> ('a, 'i, 'i) t