[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