[Haskell-beginners] Effective use of nested Monads

David Hinkes david.hinkes at gmail.com
Sun Feb 10 23:53:18 CET 2013

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20130210/9e66d97e/attachment.htm>

More information about the Beginners mailing list