[Haskell-cafe] Avoid sharing
Edward Z. Yang
ezyang at mit.edu
Mon Nov 7 20:56:02 UTC 2016
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