[Haskell-beginners] Random variable holding a function
Heinrich Apfelmus
apfelmus at quantentunnel.de
Fri Feb 27 09:49:56 UTC 2015
Daniel Bergey wrote:
> On 2015-02-26 at 12:42, Ondrej Nekola <ondra at nekola.cz> wrote:
>>
>> I try to simulate some processes, that contain randomness and I would
>> like do it idiomatic way and keep as much code not to know about
>> randomness as possible.
>>
>> type Selection = Population -> Population
>>
>> so far, it's easy:
>>
>> allSurvive :: Selection
>> allSurvive = id
>>
>> fairChance :: Int -> Population -> RVar Population
>> fairChance newSize p = Population <$> (Data.Random.Extras.sample newSize
>> $ individuals p)
>>
>> fairChance :: Int -> RVar Selection
>> (e.g. fairChance :: Int -> RVar (Population -> Population))
>>
>> Is there a way to do this? Or should I give up this way and try to give
>> up some purity and go withtype Selection :: RVar Population -> RVar
>> population?
>
> I would define Selection as
>
> | type Selection = Population -> RVar Population
>
> Then you can compose with >>=, which specializes to
>
> | (>>=) :: RVar Population -> Selection -> RVar Population
>
> or with any of the other Monad operators (eg, >=>).
>
> With this definition, you can keep your current definition of
> fairChance.
This is pretty much the "probability monad". For more on this, my
personal recommendations would be
http://apfelmus.nfshost.com/articles/random-permutations.html
http://web.engr.oregonstate.edu/~erwig/papers/PFP_JFP06.pdf
Best regards,
Heinrich Apfelmus
--
http://apfelmus.nfshost.com
More information about the Beginners
mailing list