benmachine/

There's more than one way to Monad

It's common knowledge that the standard Monad class can be defined either in terms of return and (>>=) or return, fmap, and join.

But Monad is not the only class that has alternative, equivalent, formulations. Here are some others: