[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