代码改进的示例和练习

时间:2014-08-08 18:20:20

标签: haskell optimization functional-programming

QuickCheck2的

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'])


我们在哪里可以找到更多这样的优化示例?

我们有一些有用的代码,但由于某种原因(难以测试,不可重复使用等)而闻起来,然后我们找到一种聪明的方法来使它足够好。

我所追求的不是理论,最佳实践或分析工具,而是实际示例,或者更好,练习

1 个答案:

答案 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

然后,当然,你写的实际代码越多,你就越能看到如何使它更简洁。