Monad.Based_on_bind_with_product
This signature simply extends the previous one with a product operator.
type 'a t
val return : 'a -> 'a t
val bind : ('a -> 'b t) -> 'a t -> 'b t
val product : 'a t -> 'b t -> ('a * 'b) t