計算機科学のブログ

型によるプログラミング Maybe型 Maybeを使ったより複雑な計算 データコンストラクタ JustとNothing

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 19(Maybe型:欠損値に対処する)、19.4(Maybeを使ったより複雑な計算)のクイックチェック19-3の解答を求めてみる。

コード

data Organ = Heart deriving Show
data Container = Vat Organ
data Location = Lab deriving Show

instance Show Container where
    show (Vat organ) = show organ ++ " in a vat"

report :: Maybe (Location, Container) -> String
report (Just (location, container)) =
  show container ++ " in the " ++ show location
report Nothing = "error, location not found"

container = Vat Heart

入出力結果(Terminal, Zsh)

% ghci
GHCi, version 8.10.5: https://www.haskell.org/ghc/  :? for help
macro 'doc' overwrites builtin command.  Use ':def!' to overwrite.
(0.00 secs, 0 bytes)
(0.00 secs, 0 bytes)
Loaded GHCi configuration from /.../.ghc/ghci.conf
Prelude
λ> :load sample03
[1 of 1] Compiling Main             ( sample03.hs, interpreted )
Ok, one module loaded.
(0.03 secs,)
*Main
λ> report Nothing
"error, location not found"
it :: String
(0.01 secs, 83,888 bytes)
*Main
λ> report (Just (Lab, container))
"Heart in a vat in the Lab"
it :: String
(0.00 secs, 84,536 bytes)
*Main
λ> :quit
Leaving GHCi.
%