計算機科学のブログ

型によるプログラミング 直積型と直和型 レコード構文、継承

入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON 16(直積型と直和型)、16.1(直積型)のクイックチェック16-1、直積型の呪い、階層的な設計のクイックチェック16-2の解答を求めてみる。

コード

-- クイックチェック16-1
data AuthorName = AuthorName
  { firstName :: String,
    lastName :: String} deriving Show

author :: AuthorName
author = AuthorName {lastName = "Kurt", firstName="Will"}

-- クイックチェック16-2
data Car = Car deriving Show
data Spoiler = Spoiler deriving Show
data SportsCar = SportsCar Car Spoiler deriving Show

sportsCar :: SportsCar
sportsCar = SportsCar Car Spoiler

入出力結果(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 sample01.hs 
[1 of 1] Compiling Main             ( sample01.hs, interpreted )
Ok, one module loaded.
(0.03 secs,)
*Main
λ> author
AuthorName {firstName = "Will", lastName = "Kurt"}
it :: AuthorName
(0.01 secs, 104,040 bytes)
*Main
λ> :load sample01.hs 
[1 of 1] Compiling Main             ( sample01.hs, interpreted )
Ok, one module loaded.
(0.01 secs,)
*Main
λ> sportsCar 
SportsCar Car Spoiler
it :: SportsCar
(0.00 secs, 77,448 bytes)
*Main
λ> :quit
Leaving GHCi.
%