計算機科学のブログ

型によるプログラミング 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]
%