計算機科学のブログ

Haskell - 型によるプログラミング - 合成によるデザイン:SemigroupとMonoid - 合成可能性:関数を組み合わせる)

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT3(型によるプログラミング)、LESSON 17(合成によるデザイン:SemigroupとMonoid)、17.1(合成可能性:関数を組み合わせる)、クイクックチェック 17-1の解答を求めてみる。

コード

sample1.hs

main :: IO ()
main = do
    mapM_ (\xs -> print $ myAny even xs)
          [[1, 3 .. 11],
           [2, 4 .. 10],
           [1],
           [2],
           [1, 2, 4, 6],
           [2, 4, 6, 5],
           [1, 3, 6, 5]]

myAny :: (a -> Bool) -> [a] -> Bool
myAny testFunc = (foldr (||) False) . (map testFunc)

入出力結果(Terminal, Zsh)

% runghc sample1.hs
False
True
False
True
True
True
True
%