[Haskell-cafe] Monad Stack - State + Rand?

Christopher Howard ch.howard at zoho.com
Sat Jun 18 04:22:44 UTC 2016

Hi. I'm working through "Haskell Design Patterns" and got inspired to
try to create my first monad stack. What I really wanted though (not
shown in the book) was to combine State and Rand. I daresay I got
something to compile:

walk :: RandomGen g => StateT (Float, Float) (Rand g) (Float, Float)
walk = do (x, y) <- get
          put (x + 1, y + 1)
          get >>= return

However, the moment I try to insert a getRandomR or something in it, I
get an error

Could not deduce (MonadRandom (StateT (Float, Float) (Rand g)))
      arising from a use of `getRandomR' <...snip...>
add an instance declaration for
      (MonadRandom (StateT (Float, Float) (Rand g)))

I see there are instances

MonadRandom m => MonadRandom (StateT s m)
RandomGen g => MonadRandom (Rand g)

in Control.Monad.Random.Class, so I am not quite sure what is expected
of me.

To protect my privacy, please use PGP encryption. It's free and easy
to use! My public key ID is 0x340EA95A (pgp.mit.edu).

More information about the Haskell-Cafe mailing list