【发布时间】:2017-11-11 06:09:51
【问题描述】:
在编写一个探索生日悖论的程序时,我有以下可用的 Haskell 代码
sort :: Ord a => [a] -> [a]
-- body
hasDuplicates :: Eq a => [a] -> Bool
-- body
boolToInt :: Bool -> Int
-- body
main = do
-- stuff
repeats <- liftM sum . replicateM numTrials . liftM boolToInt .
liftM hasDuplicates . liftM sort . replicateM checkNum $
randomRIO (1::Int, 365)
-- stuff
在最后一行,有很多liftM一个接一个地组成。这个组合可以优化吗?
我想到了mapping liftM 到[boolToInt, hasDuplicates, sort],然后是composeing,但这个列表是异构的,所以无效。 iterate 因类似原因无法工作。
【问题讨论】:
-
好吧,至少,
liftM f . liftM g = liftM (f . g) -
这可能是一个答案。 @Izaak 打败了你!
标签: haskell