型によるプログラミング Maybe型:欠損値に対処する Maybe型に対応するmap関数の実装
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON19(Maybe型:欠損値に対処する)、19.6(練習問題)Q19-2の解答を求めてみる。
コード
maybeMap :: (t -> a) -> [Maybe t] -> [Maybe a]
maybeMap f [] = []
maybeMap f (Nothing : xs) = Nothing : maybeMap f xs
maybeMap f (Just x : xs) = Just (f x) : maybeMap f xs
maybeNums :: [Maybe Integer]
maybeNums = [Just 5, Nothing, Nothing, Just 1, Just 4, Just 2, Just 3, Nothing]
main = do
print maybeNums
print "(+ 2)"
print $ maybeMap (+ 2) maybeNums
print "(* 2)"
print $ maybeMap (* 2) maybeNums
入出力結果(Terminal, Zsh)
% runghc sample2.hs
[Just 5,Nothing,Nothing,Just 1,Just 4,Just 2,Just 3,Nothing]
"(+ 2)"
[Just 7,Nothing,Nothing,Just 3,Just 6,Just 4,Just 5,Nothing]
"(* 2)"
[Just 10,Nothing,Nothing,Just 2,Just 8,Just 4,Just 6,Nothing]
%