型によるプログラミング Maybe型:欠損値に対処する Maybeを使ったより複雑な計算
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 19(Maybe型:欠損値に対処する)、19.4(Maybeを使ったより複雑な計算)、クイックチェック 19-3の解答を求めてみる。
コード
lesson/app/Main.hs
module Main where
import Lib
main :: IO ()
main = do
mapM_
(print . report)
[ Just (Lab, Vat Heart),
Nothing
]
lesson/src/Lib.hs
module Lib where
data Organ = Heart deriving (Show)
data Container = Vat Organ
instance Show Container where
show (Vat organ) =
mconcat
[ show organ,
" in a vat"
]
data Location = Lab deriving (Show)
report :: Maybe (Location, Container) -> String
report (Just (location, container)) =
mconcat
[ show container,
" in the ",
show location
]
report Nothing = "report error"
入出力結果(Terminal, Zsh)
% stack exec lesson-exe
"Heart in a vat in the Lab"
"report error"
%