型によるプログラミング - 直積型と直和型 - ブックストアプログラムを作成する
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)の UNIT3(型によるプログラミング)、LESSON 16(直積型と直和型)、16.3(ブックストアプログラムを作成する)、クイックチェック 16-3の解答を求めてみる。
コード
sample3.hs
main :: IO ()
main = do
mapM_ (print . madeBy)
[BookItem Book {author = Creator},
RecordItem VinylRecond {artist = Creator},
ToyItem CollectibleToy {name="name"}]
data Creator = Creator deriving Show
data Book = Book {
author :: Creator
}
data VinylRecond = VinylRecond {
artist :: Creator
}
data CollectibleToy = CollectibleToy {
name :: String
}
data StoreItem =
BookItem Book |
RecordItem VinylRecond |
ToyItem CollectibleToy
madeBy :: StoreItem -> String
madeBy (BookItem book) = show $ author book
madeBy (RecordItem record) = show $ artist record
madeBy (ToyItem toy) = name toy
入出力結果(Terminal, Zsh)
% runghc sample3.hs
"Creator"
"Creator"
"name"
%