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

Christopher Howard ch.howard at zoho.com
Sat Jun 18 05:27:50 UTC 2016

Hi, I have

import Control.Monad.Random
import Control.Monad.State.Lazy
import Control.Monad.Random.Class

Though, I think the last one is superfluous.

On 06/17/2016 08:31 PM, Ivan Lazar Miljenovic wrote:
> On 18 June 2016 at 14:22, Christopher Howard <ch.howard at zoho.com> wrote:
>> 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
> Can you provide more details?  At the minimum, what imports/packages
> did you use (strict or lazy State?  Which MonadRand did you use?).
> Note also that "get >>= return" is equivalent to just "get"; you could
> even combine the first two lines using the "modify" function.
>> 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.
> Is this the MonadRandom package?  If so, I don't see the StateT instance there.

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