[Haskell-cafe] Avoid sharing

Michael Roth list at mroth.net
Tue Nov 8 18:28:18 UTC 2016


Yes, dropping 1000000000 entries is bad, 'someGenerator' was thought as 
an deputy only. In reality I have some sort of generator which generates 
a large system state varying over time. It was my fault I didn't state 
this clearly.

Thank you for the interesting reading about RNGs anyway.


Michael



Am 07.11.2016 um 21:56 schrieb Edward Z. Yang:
> It's not guaranteed.  Unfortunately there aren't really good ways
> to avoid sharing; the general advice is to convert values into
> functions, and apply them at the use site where sharing is OK.
>
> Unrelatedly, in your sample code, dropping 1000000000 entries
> is not a good way to build a splittable RNG.  Check out
> http://publications.lib.chalmers.se/records/fulltext/183348/local_183348.pdf
> and also its related work for some bettera pproaches.
>
> Edward
>
> Excerpts from Michael Roth's message of 2016-11-07 20:56:54 +0100:
>> Hello! A short question, given:
>>
>>
>>      data Seed = ...
>>      data Value = ...
>>
>>      someGenerator :: Seed -> [Value]
>>
>>      createTwo :: Seed -> ([Value], [Value])
>>      createTwo s = (as, bs) where
>>        as = someGenerator s
>>        bs = drop 1000000000 (someGenerator s)
>>
>>
>> Is it guaranteed that 'someGenerator s' is created twice and not shared
>> between 'as' and 'bs'? Is this by language design? Are there any GHC
>> options that change the behaviour?
>>
>>
>> Thank you,
>>
>> Michael
>>



More information about the Haskell-Cafe mailing list