狠狠撸

狠狠撸Share a Scribd company logo
第7章 型や型クラスを
自分で作ろう(後編)
「すごいHaskell」 pp. 151-157
前回のおさらい
データ型                         型コンストラクタ
data Shape                   data Maybe a
data Car                     data Either a b


インスタンス                       型クラス
instance Show TrafficLight   class Show a
instance Eq (Maybe m)        class (Eq a) => Num a


              型シノニム
              type String
              type AssocList k v
Functor 型クラス
class Functor f where
   fmap :: (a -> b) -> f a -> f b

意味: Functor のインスタンスは fmap に引数とし
て渡せる

cf. map :: (a -> b) -> [a] -> [b]
※ [a] は [] a と等価
リストは Functor
instance Functor [] where
   fmap = map

リストに対する fmap と map の結果は一致する
Maybe も Functor
instance Functor Maybe where
   fmap f (Just x) = Just (f x)
   fmap f Nothing = Nothing
Either は Functor?
instance Functor (Either a) where
   fmap f (Right x) = Right (f x)
   fmap f (Left x) = Left x

Either は Functor になれないが、引数を部分適用
した Either a は Functor になれる
Functor とは何か
● Functor になれるのは箱のようなもの
● 箱の中身を取り出して、関数を適用して、また箱
  に戻す

      a   fmap   b

      f          f
種類 kind
● 値を分類するラベル = 型
● 型を分類するラベル = 種類
種類 (:k)                  型 (:t)
Bool :: *                True :: Bool
Maybe :: * -> *
                         Just 3 :: Num a => Maybe a
Maybe Int:: *
Either :: * -> * -> *
                         Left "ok" :: Either [Char] b
Either String Int :: *
[] :: * -> *             [] :: [a]

More Related Content

What's hot (20)

すごい贬补蝉办别濒濒読书会
すごい贬补蝉办别濒濒読书会すごい贬补蝉办别濒濒読书会
すごい贬补蝉办别濒濒読书会
Kosuke Usami
?
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Tomohiro Kumagai
?
Web05
Web05Web05
Web05
XMLProJ2014
?
研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々
研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々
研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々
Peinan ZHANG
?
Swift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswift
Tomohiro Kumagai
?
Swift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsap
Tomohiro Kumagai
?
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーするLt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
?
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
Tsuyoshi Matsudate
?
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
Tsuyoshi Matsudate
?
関数プログラミング入门
関数プログラミング入门関数プログラミング入门
関数プログラミング入门
Hideyuki Tanaka
?
たのしい高阶関数
たのしい高阶関数たのしい高阶関数
たのしい高阶関数
Shinichi Kozake
?
Typing game
Typing gameTyping game
Typing game
coil_kpc
?
研究生のためのC++ no.4
研究生のためのC++ no.4研究生のためのC++ no.4
研究生のためのC++ no.4
Tomohiro Namba
?
代数的データ型をラムダ计算の中で表现する方法
代数的データ型をラムダ计算の中で表现する方法代数的データ型をラムダ计算の中で表现する方法
代数的データ型をラムダ计算の中で表现する方法
syamino
?
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswiftProtocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Tomohiro Kumagai
?
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
Yuichi Sakuraba
?
型推论
型推论型推论
型推论
Eita Sugimoto
?
Startprintf_2013May18
Startprintf_2013May18Startprintf_2013May18
Startprintf_2013May18
Shigekazu Takei
?
すごい贬补蝉办别濒濒読书会
すごい贬补蝉办别濒濒読书会すごい贬补蝉办别濒濒読书会
すごい贬补蝉办别濒濒読书会
Kosuke Usami
?
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Tomohiro Kumagai
?
研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々
研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々
研究会20140618:进捗と闇笔测迟丑辞苍颈蝉迟补のワンライナーテクニックを少々
Peinan ZHANG
?
Swift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API テ?サ?インカ?イト?ライン #love_swift #akibaswift
Tomohiro Kumagai
?
Swift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsapSwift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsap
Swift 3.0 の新機能 - 追加?変更まわりだけ、ざっくり紹介 2 #devsap
Tomohiro Kumagai
?
Lt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーするLt8 JavaScriptで配列をコピーする
Lt8 JavaScriptで配列をコピーする
Shingo Inoue
?
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
Tsuyoshi Matsudate
?
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
Tsuyoshi Matsudate
?
関数プログラミング入门
関数プログラミング入门関数プログラミング入门
関数プログラミング入门
Hideyuki Tanaka
?
研究生のためのC++ no.4
研究生のためのC++ no.4研究生のためのC++ no.4
研究生のためのC++ no.4
Tomohiro Namba
?
代数的データ型をラムダ计算の中で表现する方法
代数的データ型をラムダ计算の中で表现する方法代数的データ型をラムダ计算の中で表现する方法
代数的データ型をラムダ计算の中で表现する方法
syamino
?
Protocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswiftProtocol-Oriented Integers #cswift
Protocol-Oriented Integers #cswift
Tomohiro Kumagai
?
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
Yuichi Sakuraba
?

Similar to すごいHaskell 第7章 型や型クラスを自分で作ろう(後編) (8)

Applicative functor
Applicative functorApplicative functor
Applicative functor
Yuichi Adachi
?
圏と贬补蝉办别濒濒の型
圏と贬补蝉办别濒濒の型圏と贬补蝉办别濒濒の型
圏と贬补蝉办别濒濒の型
KinebuchiTomo
?
Haskell Lecture 2
Haskell Lecture 2Haskell Lecture 2
Haskell Lecture 2
Yusuke Matsushita
?
MP in Scala
MP in ScalaMP in Scala
MP in Scala
Kent Ohashi
?
贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料
時響 逢坂
?
贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料
時響 逢坂
?
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
bleis tift
?
How wonderful to be (statically) typed ?型が付くってスバラシイ?
How wonderful to be (statically) typed ?型が付くってスバラシイ?How wonderful to be (statically) typed ?型が付くってスバラシイ?
How wonderful to be (statically) typed ?型が付くってスバラシイ?
Hiromi Ishii
?
圏と贬补蝉办别濒濒の型
圏と贬补蝉办别濒濒の型圏と贬补蝉办别濒濒の型
圏と贬补蝉办别濒濒の型
KinebuchiTomo
?
贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料
時響 逢坂
?
贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料贰办尘别迟迟勉强会発表资料
贰办尘别迟迟勉强会発表资料
時響 逢坂
?
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
bleis tift
?
How wonderful to be (statically) typed ?型が付くってスバラシイ?
How wonderful to be (statically) typed ?型が付くってスバラシイ?How wonderful to be (statically) typed ?型が付くってスバラシイ?
How wonderful to be (statically) typed ?型が付くってスバラシイ?
Hiromi Ishii
?

すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)