[Haskell-cafe] [random-fu] sampleRVar with StdGen in RWS?
vanessa.mchale at iohk.io
Fri Aug 3 13:06:20 UTC 2018
It seems like the instance comes from
then, no? I only see an instance for `StateT` unfortunately. I suppose
you could write an orphan instance for RWST if you really wanted to.
On 08/03/2018 07:54 AM, Sergiu Ivanov wrote:
> Hello Vanessa,
> MonadRandom from Control.Monad.Random does indeed have an RWST instance,
> but I'd like to stick with random-fu because of the long list of
> provided distributions, and the two seem incompatible :
> I did try to force a very monoidal write-state:
> testRWS :: StdGen -> Int
> testRWS = fst . evalRWS work ()
> work = do
> tell "hello"
> sampleRVar $ uniform 1 10
> I get
> <interactive>:2:25: error:
> • No instance for (MonadRandom (RWST () String StdGen Identity)) arising from a use of ‘work’
> • In the first argument of ‘evalRWS’, namely ‘work’
> In the second argument of ‘(.)’, namely ‘evalRWS work ()’
> In the expression: fst . evalRWS work ()
> which seems to be saying the same thing as before :-(
> Thus quoth Vanessa McHale on Fri Aug 03 2018 at 14:43 (+0200):
>> It seems like you need your write-state to be a monoid in order to infer
>> a `MonadRandom` instance. Based on your code, I'm guessing the compiler
>> can't infer that.
>> Have a look at
>> On 08/03/2018 07:31 AM, Sergiu Ivanov wrote:
>>> Dear Café,
>>> I would like to use random-fu to do some pseudo-random simulations for a
>>> given StdGen (so that I can run the same simulation multiple times, if
>>> The following works:
>>> testState :: StdGen -> Int
>>> testState = evalState (sampleRVar $ uniform 1 10)
>>> The following doesn't:
>>> testRWS :: StdGen -> Int
>>> testRWS = fst . evalRWS (sampleRVar $ uniform 1 10) ()
>>> I get
>>> <interactive>:2:26: error:
>>> • No instance for (MonadRandom (RWST () b0 StdGen Identity)) arising from a use of ‘sampleRVar’
>>> • In the first argument of ‘evalRWS’, namely ‘(sampleRVar $ uniform 1 10)’
>>> In the second argument of ‘(.)’, namely ‘evalRWS (sampleRVar $ uniform 1 10) ()’
>>> In the expression: fst . evalRWS (sampleRVar $ uniform 1 10) ()
>>> Indeed, I do see a MonadRandom instance for StateT, but none for RWST .
>>> Is there a reason to not have a MonadRandom instance for RWST?
>>> Am I looking in the wrong place?
>>>  https://hackage.haskell.org/package/random-source-0.3.0.6/docs/Data-Random-Source.html
>>> Haskell-Cafe mailing list
>>> To (un)subscribe, modify options or view archives go to:
>>> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 488 bytes
Desc: OpenPGP digital signature
More information about the Haskell-Cafe