• Source
    1. import System.Random
    2. import Data.List
    3.  
    4. randomDbls :: StdGen -> [ Double ]
    5. randomDbls= randomRs (0,1)
    6.  
    7. chooseItem is ws r = let
    8. folder a b = a : map ( + a ) b
    9. selecter r ( i, ( f, t ) ) = f <= r && r < t
    10. ts = foldr folder [ ] ws
    11. fs = 0 : ts
    12. ifts = zip is $ zip fs ts
    13. in fst $ head $ filter ( selecter r ) ifts
    14.  
    15. main = do
    16. rds <- ( return . randomDbls ) =<< getStdGen
    17. print $ map (chooseItem ['A'..'C' ] [0.4,0.5,0.1] ) $ take 100 rds