[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.
> 
> 

-- 
http://justonemoremathproblem.com
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