
On 2015-02-26 at 12:42, Ondrej Nekola
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. There's no problem defining values of type `RVar (Population -> Population`. `fmap allSurvive` is one such. But defining fairChance this way seems a bit awkward to me. Daniel