[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