Monad classes using functional dependencies, with instances for various monad transformers.