5. 7.2 形づくる
• area :: Shape -> Float
• area (Circle _ _ r) = pi * r ^ 2
• area (Rectangle x1 y1 x2 y2) =
(abs $ x1 - x2) * (abs $ y1 - y2)
6. 7.2 形づくる
• data Point =
Point Float Float deriving (Show)
• data Shape = Circle Point Float |
Rectangle Point Point
deriving (Show)
• area :: Shape -> Float
• area (Circle _ r) = pi * r ^ 2
• area (Rectangle (Point x1 y1) (Point x2
y2)) = …
7. 7.3 レコード構文
• data Car =
Car String String Int
deriving (Show)
• Car "Ford" "Mustang" 1967
8. 7.3 レコード構文
• data Car =
Car String String Int
deriving (Show)
• company :: Car -> String
• company (Car company _ _) = company
• model :: Car -> String
• model (Car _ model _) = model
• year :: Car -> Int
• year (Car _ _ year) = year
9. 7.3 レコード構文
• data Car =
Car { company :: String
, model :: String
, year :: Int
} deriving (Show)
• Car {year = 1990, model = "Mark
II", company = "Toyota"}
• Car "Ford" "Mustang" 1967
10. 7.4 型引数
• data Maybe a = Nothing | Just a
• Just “Hay” :: Maybe String
• [1..10] :: [Int]
• [“learn”, “Haskell”] :: [String]
11. 7.4 型引数
• Map k v
• data (Ord k) => Map k v ...
• データ宣言には決して型クラス制約をつ
けない
• Map.toList :: Map k v -> [(k, v)]
12. 7.4 型引数
• data Vector a = Vector a a a
deriving (Show)
• vplus :: (Num t) => Vector t ->
Vector t -> Vector t
• (Vector i j k) `vplus` (Vector l m
n) =
Vector (i+l) (j+m) (k+n)
• vectMult :: (Num t) => Vector t -> t
-> Vector t
• scalarMult :: (Num t) => Vector t ->
Vector t -> t
13. 7.5 インスタンスの自動導出
• data Person = Person
{ firstName :: String
, lastName :: String
, age :: Int
} deriving (Eq)