This简介以一个很好的代码改进示例开始。
之前
getList = find 5 where
find 0 = return []
find n = do
ch <- getChar
if ch `elem` ['a'..'e'] then do
tl <- find (n-1)
return (ch : tl) else
find n
后
-- A thin monadic skin layer
getList :: IO [Char]
getList = fmap take5 getContents
-- The actual worker
take5 :: [Char] -> [Char]
take5 = take 5 . filter (`elem` ['a'..'e'])
我们在哪里可以找到更多这样的优化示例?
我们有一些有用的代码,但由于某种原因(难以测试,不可重复使用等)而闻起来,然后我们找到一种聪明的方法来使它足够好。
我所追求的不是理论,最佳实践或分析工具,而是实际示例,或者更好,练习。
答案 0 :(得分:1)
尝试使用hlint,它会为您提供有关如何改进代码的建议:http://community.haskell.org/~ndm/hlint/
由于你要求提供具体的例子,这里有一个来自Real World Haskell的关于如何驾驭“阶梯式”的例子:http://book.realworldhaskell.org/read/code-case-study-parsing-a-binary-data-format.html#x_JR
然后,当然,你写的实际代码越多,你就越能看到如何使它更简洁。