
Programming for Rosetta Codes task http://www.rosettacode.org/wiki/Probabilistic_Choice I observed a remarkable (that's to say: for me) difference in timing using lambda function in the one case and point free in the other. Timing was measured in GHCi. Compiled there's no difference! Using lambda ============ ... labels = ["aleph", "beth", "gimel", "daleth", "he", "waw", "zayin", "heth" ] piv n = take n . flip (++) (repeat ' ') main = do g <- newStdGen let rs :: [Float] rs = take 1000000 $ randomRs(0,1) g ps, sps :: [Float] ps = ap (++) (return. (-) 1 .sum) $ map recip [5.0..11.0] sps = scanl1 (+) ps ix = map ((/1000000.0).fromIntegral.length). group.sort $ map (\x -> fromJust $ findIndex not $ map (x>) sps) rs mapM_ (\(l,s,c)-> putStrLn $ (piv 6 l) ++ " " ++ (piv 12 $ show $ s) ++ " " ++ ((piv 12 $ show $ c) )) $ zip3 labels ps ix Using point free ================ replace $ map (\x -> fromJust $ findIndex not $ map (x>) sps) rs by $ map (fromJust. findIndex not. flip map sps. (>)) rs lambda: ======= *Main> main ... (18.24 secs, 2524489600 bytes) point free: =========== *Main> main ... (12.15 secs, 2470893260 bytes) Should I program using point free as much as possible? :-) Thanks =@@i