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

Kazkuki Oakamoto
Kazkuki OakamotoStudent at University
すごい 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)
1 of 20

Recommended

おいしそうな写真加工 by
おいしそうな写真加工おいしそうな写真加工
おいしそうな写真加工IRI MO
656 views16 slides
Processing資料(4) アニメーション by
Processing資料(4) アニメーションProcessing資料(4) アニメーション
Processing資料(4) アニメーションreona396
1.1K views6 slides
姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell by
姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell姫路 IT 系勉強会 Vol. 11 L1 グランプリ Haskell
姫路 IT 系勉強会 Vol. 11 L1 グランプリ HaskellKazkuki Oakamoto
850 views27 slides
姫路 IT 系勉強会 Vol.4 SKK by
姫路 IT 系勉強会 Vol.4 SKK姫路 IT 系勉強会 Vol.4 SKK
姫路 IT 系勉強会 Vol.4 SKKKazkuki Oakamoto
562 views21 slides
OSC Kansai @Kyoto 2012 LT 競技プログラミングからひとつまみ by
OSC Kansai @Kyoto 2012 LT 競技プログラミングからひとつまみOSC Kansai @Kyoto 2012 LT 競技プログラミングからひとつまみ
OSC Kansai @Kyoto 2012 LT 競技プログラミングからひとつまみKazkuki Oakamoto
2.1K views22 slides
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク (まじめ版) by
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク (まじめ版)オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク (まじめ版)
オープンースカンファレンス 2011 関西 @神戸 学生ライトニングトーク (まじめ版)Kazkuki Oakamoto
487 views19 slides

More Related Content

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

  by
  
 a-hisame
1.4K views50 slides
すごいHaskell読書会 第7章 (前編) by
すごいHaskell読書会 第7章 (前編)すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)Suguru Hamazaki
1K views48 slides
Haskell勉強会2 in ie by
Haskell勉強会2 in ieHaskell勉強会2 in ie
Haskell勉強会2 in iemaeken2010
485 views83 slides
R's anti sparseness by
R's anti sparsenessR's anti sparseness
R's anti sparsenessybenjo
1K views40 slides
Monadicプログラミング マニアックス by
Monadicプログラミング マニアックスMonadicプログラミング マニアックス
Monadicプログラミング マニアックスTomoharu ASAMI
2.2K views37 slides
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと by
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
2.3K views24 slides

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

  by a-hisame
  
 
a-hisame1.4K views
すごいHaskell読書会 第7章 (前編) by Suguru Hamazaki
すごいHaskell読書会 第7章 (前編)すごいHaskell読書会 第7章 (前編)
すごいHaskell読書会 第7章 (前編)
Suguru Hamazaki1K views
Haskell勉強会2 in ie by maeken2010
Haskell勉強会2 in ieHaskell勉強会2 in ie
Haskell勉強会2 in ie
maeken2010485 views
R's anti sparseness by ybenjo
R's anti sparsenessR's anti sparseness
R's anti sparseness
ybenjo1K views
Monadicプログラミング マニアックス by Tomoharu ASAMI
Monadicプログラミング マニアックスMonadicプログラミング マニアックス
Monadicプログラミング マニアックス
Tomoharu ASAMI2.2K views
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと by Haruka Ozaki
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki2.3K views
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow by MasanoriSuganuma
RAFT: Recurrent All-Pairs Field Transforms for Optical FlowRAFT: Recurrent All-Pairs Field Transforms for Optical Flow
RAFT: Recurrent All-Pairs Field Transforms for Optical Flow
MasanoriSuganuma746 views
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】 by Tomoharu ASAMI
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
関数モデル 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第8回】
Tomoharu ASAMI311 views
すごいHaskell読書会 第六章 発表資料 by Hiromasa Ohashi
すごいHaskell読書会 第六章 発表資料すごいHaskell読書会 第六章 発表資料
すごいHaskell読書会 第六章 発表資料
Hiromasa Ohashi1.7K views
Ruby科学データ処理ツールの開発 NArrayとPwrake by Masahiro Tanaka
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
Masahiro Tanaka8.7K views

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