
Hi haskell-beginners, I'm starting to come to the idea of exposing a Monad as a means of controlling an API. So, I've started creating my own Monad data types based on classical monads. However, I'm running into a problem regarding creating monad definitions when using nested Monads. For example: newtype Example m o = Example { runExample :: State Int (m o) } Is there a clean way to make Example a monad? instance Monad m => Monad (Example m) where -- return is easy return = Example . return . return -- bind is hard. -- f :: o -> Example m p -- a :: Example m o a >>= f = ... My intuition tells me that this should be simple, I should just use the State's bind operation, but I can't seem to make it work. Any advise would be great. Thanks, Dave -- David Hinkes