計算機科学のブログ

型によるプログラミング - 直積型と直和型 - ブックストアプログラムを作成する

入門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"
%