SlideShare a Scribd company logo
すごい Haskell 読書会
    in 大阪
       #5
     岡本和樹
    @kakkun61
7.1 新しいデータ型を定義する
• data Bool = True | False
• data 型 = 値コンストラクター
7.2 形づくる
• 円
 – x座標
 – y座標
 – 半径
• 四角形
 – 左上x座標
 – 左上y座標
 – 右下x座標
 – 右下y座標
7.2 形づくる
• data Shape =
      Circle Float Float Float |
      Rectangle Float Float Float Float

• Circle :: Float -> Float -> Float ->
  Shape
• Rectangle :: Float -> Float -> Float ->
  Float -> Shape
7.2 形づくる
• area :: Shape -> Float
• area (Circle _ _ r) = pi * r ^ 2
• area (Rectangle x1 y1 x2 y2) =
      (abs $ x1 - x2) * (abs $ y1 - y2)
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.3 レコード構文
• data Car =
      Car String String Int
      deriving (Show)
• Car "Ford" "Mustang" 1967
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
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
7.4 型引数
• data Maybe a = Nothing | Just a
• Just “Hay” :: Maybe String

• [1..10] :: [Int]
• [“learn”, “Haskell”] :: [String]
7.4 型引数
• Map k v
• data (Ord k) => Map k v ...
• データ宣言には決して型クラス制約をつ
  けない
• Map.toList :: Map k v -> [(k, v)]
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
7.5 インスタンスの自動導出
• data Person = Person
      { firstName :: String
      , lastName :: String
      , age :: Int
      } deriving (Eq)
7.5 インスタンスの自動導出
• deriving (Eq, Show, Read)
• show :: Person -> String
• read :: String -> Person
7.5 インスタンスの自動導出
• ghci> read "Person {firstName
  =¥"Michael¥", lastName
  =¥"Diamond¥", age = 43}" :: Person

• Person {firstName = "Michael",
  lastName = "Diamond", age = 43}
7.5 インスタンスの自動導出
• data Bool =
      False | True deriving (Ord)

•   ghci> True `compare` False
•   GT
•   ghci> False < True
•   True
7.5 インスタンスの自動導出
• data Day =
      Monday | Tuesday | Wednesday |
      Thursday | Friday | Saturday |
      Sunday
      deriving ( Eq, Ord, Show, Read
               , Bounded, Enum)
7.5 インスタンスの自動導出
• Bounded クラス

•   ghci> minBound :: Day
•   Monday
•   ghci> maxBound :: Day
•   Sunday
7.5 インスタンスの自動導出
• Enum クラス

•   ghci> succ Monday
•   Tuesday
•   ghci> pred Saturday
•   Friday
•   ghci> [Thursday .. Sunday]
•   [Thursday,Friday,Saturday,Sunday]
7.6 型シノニム
• type String = [Char]

• type AssocList k v = [(k, v)]

• data Either a b = Left a | Right b
  deriving (Eq, Ord, Read, Show)

More Related Content

PPT
おいしそうな写真加工
PDF
Processing資料(4) アニメーション
PDF
姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell
PDF
姫路 IT 系勉強会 Vol.4 SKK
PDF
OSC Kansai @Kyoto 2012 LT 競技プログラミングからひとつまみ
ODP
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク (まじめ版)
PDF
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
ODP
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク
おいしそうな写真加工
Processing資料(4) アニメーション
姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell
姫路 IT 系勉強会 Vol.4 SKK
OSC Kansai @Kyoto 2012 LT 競技プログラミングからひとつまみ
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク (まじめ版)
姫路 IT 系勉強会 Vol.6 プログラミングコンテストという名のオンラインゲームがあるらしい
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク

Similar to すごい Haskell 読書会 in 大阪 #5 (20)

KEY
PDF
すごいHaskell読書会 第7章 (前編)
PDF
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
PDF
すごいHaskell楽しく学ぼう 第6章
PDF
Haskell勉強会2 in ie
PDF
Ekmett勉強会発表資料
PDF
Haskell超入門 Part.1
PDF
すごいHaskell読書会
PDF
Haskell Lecture 2
PPTX
第3章 型とクラス
PPTX
第3章 型とクラス
PDF
すごいH 第12章モノイド
ODP
Ekmett勉強会発表資料
PDF
F#入門 ~関数プログラミングとは何か~
KEY
Algebraic DP: 動的計画法を書きやすく
PDF
スタートHaskell2 型を信じろ
PDF
すごいHaskell読書会 in 大阪 #6
PDF
Scalaプログラミング・マニアックス
PDF
すごいHaskell読書会 第六章 発表資料
すごいHaskell読書会 第7章 (前編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(前編)
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
すごいHaskell楽しく学ぼう 第6章
Haskell勉強会2 in ie
Ekmett勉強会発表資料
Haskell超入門 Part.1
すごいHaskell読書会
Haskell Lecture 2
第3章 型とクラス
第3章 型とクラス
すごいH 第12章モノイド
Ekmett勉強会発表資料
F#入門 ~関数プログラミングとは何か~
Algebraic DP: 動的計画法を書きやすく
スタートHaskell2 型を信じろ
すごいHaskell読書会 in 大阪 #6
Scalaプログラミング・マニアックス
すごいHaskell読書会 第六章 発表資料
Ad

すごい Haskell 読書会 in 大阪 #5