Haskell 勉強会

社内有志による Haskell 勉強会。

↓テキストはこれ。

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門

第4章 Haskell の基礎 (3) モジュールと総合演習

fgrep.hs で、

fgrep :: String -> String -> String
fgrep pattern cs = unlines $ filter match $ lines cs
  where
    match :: String -> Bool
    match line = any prefixp $ tails line

    prefixp :: String -> Bool
    prefixp line = pattern `isPrefixOf` line

が、関数合成と部分適用を使うと、

fgrep pattern = unlines . filter (match pattern) . lines
match pattern = any (pattern `isPrefixOf`) . tails

と書けるとあるけれど、match がグローバルになってる点が後退している感じ。

fgrep pattern = unlines . filter match . lines
  where
    match = any (pattern `isPrefixOf`) . tails

の方が良くないかな?