第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

PDF
Extensible Eff Applicative
PDF
Freer Monads, More Extensible Effects
PDF
Python勉強会4-制御構文とパッケージ
ODP
Real World OCamlを読んでLispと協調してみた
PPTX
第3章 型とクラス
PPTX
第3章 型とクラス
KEY
Sml#探検隊
PDF
関数型プログラミング入門 with OCaml
Extensible Eff Applicative
Freer Monads, More Extensible Effects
Python勉強会4-制御構文とパッケージ
Real World OCamlを読んでLispと協調してみた
第3章 型とクラス
第3章 型とクラス
Sml#探検隊
関数型プログラミング入門 with OCaml

What's hot (20)

PDF
すごいHaskell読書会
PDF
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
PPTX
PDF
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
PDF
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
PDF
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
PDF
Lt8 JavaScriptで配列をコピーする
PDF
Lisp study
PDF
これから Haskell を書くにあたって
ODP
これから Haskell を書くにあたって
PDF
関数プログラミング入門
PDF
たのしい高階関数
PDF
Typing game
PDF
研究生のためのC++ no.4
PDF
代数的データ型をラムダ計算の中で表現する方法
PPTX
Yokohama6 epi
PDF
Protocol-Oriented Integers #cswift
PDF
Fork/Join Framework。そしてLambdaへ。
PDF
型推論
PDF
Startprintf_2013May18
すごいHaskell読書会
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
研究会20140618:進捗と闇Pythonistaのワンライナーテクニックを少々
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3.0 の新機能 - 追加・変更まわりだけ、ざっくり紹介 2 #devsap
Lt8 JavaScriptで配列をコピーする
Lisp study
これから Haskell を書くにあたって
これから Haskell を書くにあたって
関数プログラミング入門
たのしい高階関数
Typing game
研究生のためのC++ no.4
代数的データ型をラムダ計算の中で表現する方法
Yokohama6 epi
Protocol-Oriented Integers #cswift
Fork/Join Framework。そしてLambdaへ。
型推論
Startprintf_2013May18
Ad

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

KEY
Applicative functor
PDF
圏とHaskellの型
PDF
Haskell Lecture 2
PDF
MP in Scala
ODP
Ekmett勉強会発表資料
PDF
Ekmett勉強会発表資料
PDF
モナドハンズオン前座
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Applicative functor
圏とHaskellの型
Haskell Lecture 2
MP in Scala
Ekmett勉強会発表資料
Ekmett勉強会発表資料
モナドハンズオン前座
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Ad

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