コンテキストでの型の操作 コンテキストとしてのリスト:Applicative型クラスをさらに掘り下げる 非決定論的な計算とリスト
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT5(コンテキストでの型の操作)、LESSON29(コンテキストとしてのリスト:Applicative型クラスをさらに掘り下げる)、29.6(練習問題)Q29-3の解答を求めてみる。
コード
必要な購入本数 :: [Int]
必要な購入本数 = pure (-) <*> 必要な本数 <*> 既にある本数
必要な本数 :: [Int]
必要な本数 = (+ ルームメイトと飲んだ本数) <$> 友人と飲んだ本数
既にある本数 :: [Int]
既にある本数 = [6, 12]
ルームメイトと飲んだ本数 :: Int
ルームメイトと飲んだ本数 = 4
友人と飲んだ本数 :: [Int]
友人と飲んだ本数 = pure (*) <*> 総人数 <*> 夜に飲む本数
総人数 :: [Int]
総人数 = pure (+) <*> [2] <*> [2, 3]
夜に飲む本数 :: [Int]
夜に飲む本数 = [3, 4]
main :: IO ()
main = do
print 必要な購入本数
print $ maximum 必要な購入本数
入出力結果(Terminal, Zsh)
% runghc sample3.hs
[10,4,14,8,13,7,18,12]
18
%