The same as S except the monad type has three arguments. The second and third are always just passed through.
include Syntax3 with type (a, d, e) t := (a, d, e) t
module Let_syntax : sig ... end
module Monad_infix : Infix3 with type (a, d, e) t := (a, d, e) t
val return : 'a ‑> ('a, _, _) t