SlideShare a Scribd company logo
1 of 29
ファンクターから
アプリカティブファンクターへ
     @UsrNameu1
自己紹介
@UsrNameu1

・新卒社会人一年目
・大学では物理を専攻
・院に行くはずだったけどちょっと悩んで社会人
・職場近いんで神保町でひょっこり会うかも知れません
・Haskellを始めた理由は数学に近そうな言語だったから
・趣味は登山と囲碁です
ファンクター復習(7章より)
ファンクターとは?
・全体を写せる(map over)性質をもつ型クラス


型クラス実装

class Functor f where
fmap :: (a -> b) -> f a -> f b

f:型コンストラクタ(:k f で f:: *->* を返す)
CASE1:LIST
Functor インスタンス宣言
instance Functor [] where
    fmap = map


map :: (a->b) -> [a] -> [b]

↑(:k [] で []:*->*が返ってくる)

ghci> fmap (*2) [1..3]
[2,4,6]
CASE2:MAYBE
Functor インスタンス宣言
instance Functor Maybe where
    fmap f (Just x) = Just (f x)
    fmap f Nothing = Nothing

↑(:k MaybeでMaybe::*->*が返ってくる)

ghci>fmap (*2) (Just 200)
Just 400
 _人人人人人人人人人人人_ 
 >箱の中身だけを変えて返す<
  ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y ̄
CASE3:IO(ここから11章)
Functor インスタンス宣言
instance Functor IO where
    fmap f action = do
        result <- action
        return (f result)


↑resultに束縛されたactionにfを適用して返す
⇢何が嬉しいのか?
CASE3:IO(ここから11章)
main = do line <- getLine
          let line’ = reverse line
          putStrLn $ “You said “ ++ line’ ++ “ backwards!”
          putStrLn $ “Yes, you said “ ++ line’ ++ “ backwards!”


                                ↓
main = do line <- fmap reverse getLine
          putStrLn $ “You said “ ++ line ++ “ backwards!”
          putStrLn $ “Yes, you said “ ++ line ++ “ backwards!”


                        ↓
                    …ちょっと、嬉しい
CASE3:IO(ここから11章)
p195 todo.hs source
view :: [String] -> IO ()
view [fileName] = do
     contents <- readFile fileName
     let todoTasks = lines contents
         numberedTasks = zipWith
                          (n line -> show n ++ " - " ++ line)
                          [0..] todoTasks
     putStr $ unlines numberedTasks
                                ↓
view :: [String] -> IO ()
view [fileName] = do
     numberedTasks <- fmap (zipWith
                            (n line -> show n ++ " - " ++ line)
                            [0..] . lines ) $readFile fileName
     putStr $ unlines numberedTasks

                          ↓
                      なかなか嬉しい!
CASE4:((->) r)
そもそも(->)とは?
⇢函数引数と返り値の型を(ー>)で区切り、返り値の型
を常に宣言の最後に置く(p25)

                  ↓
              視点を変えて

(ー>)を2つの型をとって函数を返す型コンストラクタ
と見立てる 
(実際 :k (->) で(->) :: * -> * -> * を返す)
CASE4:((->) r)
ー>のままではFunctorとして使えないため一つ引数の型
rをとって((->) r)を新しいFunctorと見立てる
(∵ :k ((->) Int) ▶ ((->) Int) :: * -> *)
                     ↓
Functor インスタンス宣言
instance Functor ((->) r) where
    fmap f g = (x -> f (g x))
                                fmap = (.)
  fmap::(a->b)->((->)r a)->((->)r b)
= fmap::(a->b)->(r->a)->(r->b)
「文脈」のお話
Functor クラス実装
class Functor f where
    fmap :: (a -> b) -> f a -> f b

のfを文脈(Computational context)と呼ぶ

例:
(->) r  型入力を一つすると函数型を返す文脈
[]    型入力を一つするとリスト型を返す文脈
「持ち上げ」のお話
(ー>)を2つの型をとって函数を返す型コンストラクタ
と見立てる
class Functor f where
    fmap :: (a -> b) -> f a -> f b 
                      ↓ クラス実装の視点を変えて
   fmap :: (a -> b) -> (f a -> f b)

と見て、fmapを「元の函数と似てるけどFunctor値をとっ
てFunctor値を返す函数」を返すメソッドと見立てること
もできる。この操作を持ち上げ(lifting)と呼ぶ。
「持ち上げ」のお話
例:
ghci> let shout = fmap (++ “!”)
ghci> :t shout
shout :: Functor f => f [Char] -> f [Char]
ghci> shout [“ha”,“ka”,“ta”,”no”]
[“ha!”,“ka!”,”ta!”,”no!”]
                          「持ち上げられた函数」


※これまでの
 fmapが函数とFunctor値を引数とする二引数函数である
 見方が否定されたわけではない。
ファンクター則
Functorクラスのインスタンスには2つのきまりがある

第一法則(恒等函数の保存)
fmap id (f a) = id (f a)


第二法則(合成函数の分配)
fmap (g . h) (f a) = fmap g (fmap h (f a))


※法則は数学的要請(圏論)による、下記リンクを参照
http://ja.wikibooks.org/wiki/Haskell/%E5%9C%8F%E8%AB%96
ファンクター則
例:(->) r

instance Functor ((->) r) where
    fmap f g = f . g

第一則: fmap id g = id . g = id (g)
第二則: fmap (f . g) h = f . g . h
                      = f (g . h)
                      = fmap f (g . h)
                      = fmap f (fmap g h)
ファンクター則を満たさないファンクター
data CMaybe a = CNothing
              | CJust Int a deriving (Show)
instance Functor CMaybe where
    fmap f CNothing = CNothing
    fmap f (CJust count x)
          = CJust (count+1) (f x)

  fmap id (CJust 0 “haha”)
≠ id (CJust 0 “haha”) より
第一則: fmap id (f a) = id (f a) 
を満たさず、Functorとして不適切
アプリカティブファンクター
二引数函数をfmapを用いてFunctor値に適用してみる
例:ghci>:t   fmap (++) (Just “hey”)

  fmap   (++) (Just “hey”) :: Maybe([Char] -> [Char])



Functor内部に函数が入った!
                               ↑
カリー化された複数引数函数に部分適用が施され、函数を
値として返すため (p62参照)
アプリカティブファンクター
このFunctor内部の函数を使ってFunctor値を写したい! 
しかし、普通に適用しようとすると…
例:
ghci> let a = fmap (++) (Just “hey”)
ghci> fmap a (Just “ you!”)
<interactive>:31:6:
    Couldn't match expected type `a0 -> b0'
                with actual type `Maybe ([Char] -> [Char])'
    In the first argument of `fmap', namely `a'
    In the expression: fmap a (Just " you!")
    In an equation for `it': it = fmap a (Just " you!")
                                             _人人人人人人人_
となり、うまくいかない                                  >アプリカティブ <

             そこで!                            > ファンクター <
                                              ̄^Y^Y^Y^Y^Y^Y^Y
アプリカティブファンクター
Control.Applicativeモジュール内
class (Functor f) => Applicative f where
    pure :: a -> f a
    (<*>) :: f (a -> b) -> f a -> f b


pureは文脈内に型を置く函数

(<*>)はfmapの函数引数が文脈内にあっても適用可能な
グレードアップバージョン
アプリカティブファンクター
例1:Maybe Applicative Functor
instance Applicative Maybe where
    pure = Just
    Nothing <*> _ = Nothing
    (Just f) <*> sth = fmap f sth

ghci> let a = fmap (++) (Just “hey”)
ghci> a <*> (Just “ you!”)
Just "hey you!"



※普通のファンクターの場合ファンクター内の関数適用の結果をファンクター外に
 取り出す一般的な方法は無い。
アプリカティブファンクター
便利な記号<$>
pure (+) <*> Just 3 <*> Just 5
をもっと簡潔にしたい!

アプリカティブ則(ファンクタ則のようなもの)の一つに
pure f <*> x = fmap f x があり

更に短くf <$> xと書ける(Control.Applicative内)
(<$>) :: (Functor f) => (a->b) -> f a -> f b
f <$> x = fmap f x
         (ちなみにghci> :t ($) ▶   ($) :: (a -> b) -> a -> b )
アプリカティブファンクター
例2:List Applicative Functor
instance Applicative [] where
    pure x = [x]
    fs <*> xs = [f x| f <- fs, x <- xs]

ghci> pure “Hey” :: [String]
[“Hey”]                        (::=型注釈,p30参照)


・定義から可能な組み合わせ全てをリストとして提示する
ghci> filter (>50) $ (*) <$> [2,5,10] <*> [8,10,11]
[55,80,100,110]                           (::=型注釈,p30参照)
アプリカティブファンクター
例3:IO Applicative Functor
instance Applicative IO where
    pure = return
    a <*> b = do
        f <- a
        x <- b
        return (f x)

ghci> (++) <$> getLine <*> getLine
hgoaih
golk
"hgoaihgolk"
アプリカティブファンクター
例4:((->) r) Applicative Functor
instance Applicative ((->) r) where
    pure x = (_ -> x)
    f <*> g = x -> f x (g x)

 pure :: a -> (r -> a)
(<*>) :: (r -> (a -> b)) -> (r -> a) -> (r -> b)

ghci> (+) <$> (+3) <*> (*100) $ 5
508
(ここで:t (+) <$> (+3) ▶ (+) <$> (+3) :: Num a => a -> a -> a)

ghci> (x y z -> [x,y,z]) <$> (+3) <*> (*2) <*> (/2) $ 5
[8.0,10.0,2.5]

・<*>,<$>は頭の函数に引数函数を渡す為の道具と割切る
アプリカティブファンクター
例5:ZipList Applicative Functor
instance Applicative ZipList where
    pure x = ZipList (repeat x)
    ZipList fs <*> ZipList xs
    = ZipList (zipWith (f x -> f x) fs xs)

・[]の<*>は可能な組み合わせすべてを結果に出す
・ZipListの<*>はリストの個々の函数を対応する位置の
 値に適用して結果に出す

・ZipListをアプリカティブ・スタイルで使えばzipWith
 函数群を使う必要がない
アプリカティブ則
アプリカティブファンクターにもファンクター則同様に

写像性    pure f <*> x = fmap f x
恒等函数保存 pure id <*> v = v
分配則    pure (.) <*> u <*> v <*> w
       = u <*> (v <*> w)
準同型    pure f <*> pure x = pure (f x)
交換則    u <*> pure y = pure ($ y) <*> u

が成立
アプリカティブの便利な函数達
Control.Applicative内には<$>の他にも
liftA2::(Applicative f) => (a->b->c)
                        -> f a -> f b -> f c
liftA2 f a b = f <$> a <*> b
やその他様々有用な函数(<$,<**>,liftA3..)が存在

また、ユーザ定義により(<*),(*>),等の函数も使えるよ
うになるらしい。詳しくは以下URLを参照
http://www.haskell.org/ghc/docs/6.12.1/html/libraries/base/
Control-Applicative.html
アプリカティブの便利な函数達
他にも自分で便利な函数を作れる
sequenceA :: (Applicative f) => [f a] -> f [a]
sequenceA [] = pure []
sequenceA (x:xs) = (:) <$> x <*> sequenceA xs
ghci> sequenceA [Just 1,Just 2]
Just [1,2]
ghci> sequenceA [(>4),(<10),odd] 7
[True,True,True]
ghci> sequenceA [[1,2],[3,4],[5,6]]
[[1,3,5],[1,3,6],[1,4,5],[1,4,6],[2,3,5],[2,3,6],[2,4,5],[2,4,6]]
ghci> sequenceA [getLine,getLine]
hogehoge
mogemoge
["hogehoge","mogemoge"]

下2つは(:) <$> [1,2] <*> ((:) <$> [3,4] <*> [5,6])などと分解してみると
結果の理由が理解しやすい
Applicative functor

More Related Content

What's hot

言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5Kenta Hattori
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-Hiromasa Ohashi
 
Van laarhoven lens
Van laarhoven lensVan laarhoven lens
Van laarhoven lensNaoki Aoyama
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールNobuhisa Koizumi
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftTomohiro Kumagai
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングsatoshimurakumo
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpTomohiro Kumagai
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5Takinami Kei
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」Nagi Teramo
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会Takinami Kei
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門kwatch
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話Moriyoshi Koizumi
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいdigitalghost
 

What's hot (20)

CLR/H No.35-2
CLR/H No.35-2CLR/H No.35-2
CLR/H No.35-2
 
Mock and patch
Mock and patchMock and patch
Mock and patch
 
言語処理系入門€5
言語処理系入門€5言語処理系入門€5
言語処理系入門€5
 
すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-すごいHaskell楽しく学ぼう-第12章モノイド-
すごいHaskell楽しく学ぼう-第12章モノイド-
 
Van laarhoven lens
Van laarhoven lensVan laarhoven lens
Van laarhoven lens
 
これからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツールこれからの「言語」の話をしよう ―― 未来を生きるためのツール
これからの「言語」の話をしよう ―― 未来を生きるためのツール
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
初めてのSTL
初めてのSTL初めてのSTL
初めてのSTL
 
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswiftSwift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
Swift 3 を書くときに知っておきたい API デザインガイドライン #love_swift #akibaswift
 
F#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミングF#とC#で見る関数志向プログラミング
F#とC#で見る関数志向プログラミング
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorpSwift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
Swift 3 で新しくなったところ - 表面から見えにくいところを中心に紹介 #ISAOcorp
 
Java8 Lambda chapter5
Java8 Lambda chapter5Java8 Lambda chapter5
Java8 Lambda chapter5
 
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
 
F#のすすめ
F#のすすめF#のすすめ
F#のすすめ
 
Effective java 勉強会
Effective java 勉強会Effective java 勉強会
Effective java 勉強会
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Goをカンストさせる話
Goをカンストさせる話Goをカンストさせる話
Goをカンストさせる話
 
C++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みくださいC++コンパイラ GCCとClangからのメッセージをお読みください
C++コンパイラ GCCとClangからのメッセージをお読みください
 

Similar to Applicative functor

すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)Nozomu Kaneko
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座bleis tift
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数Shinichi Kozake
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門Hideyuki Tanaka
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたってTsuyoshi Matsudate
 
リストモナドを作ってみた
リストモナドを作ってみたリストモナドを作ってみた
リストモナドを作ってみたAtsushi Kanehara
 
Adding simpl GVN path into GHC
Adding simpl GVN path into GHCAdding simpl GVN path into GHC
Adding simpl GVN path into GHCKei Hibino
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPIDaisuke Igarashi
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsHiromi Ishii
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit ScalaKota Mizushima
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPAkira Takahashi
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Yuichi Sakuraba
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式digitalghost
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへNaoki Kitora
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたKazuyuki TAKASE
 

Similar to Applicative functor (20)

すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
すごいHaskell 第7章 型や型クラスを自分で作ろう(後編)
 
モナドハンズオン前座
モナドハンズオン前座モナドハンズオン前座
モナドハンズオン前座
 
たのしい高階関数
たのしい高階関数たのしい高階関数
たのしい高階関数
 
関数プログラミング入門
関数プログラミング入門関数プログラミング入門
関数プログラミング入門
 
たのしい関数型
たのしい関数型たのしい関数型
たのしい関数型
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
Haskell超入門 Part.1
Haskell超入門 Part.1Haskell超入門 Part.1
Haskell超入門 Part.1
 
リストモナドを作ってみた
リストモナドを作ってみたリストモナドを作ってみた
リストモナドを作ってみた
 
MP in Scala
MP in ScalaMP in Scala
MP in Scala
 
Adding simpl GVN path into GHC
Adding simpl GVN path into GHCAdding simpl GVN path into GHC
Adding simpl GVN path into GHC
 
Pythonで始めるDropboxAPI
Pythonで始めるDropboxAPIPythonで始めるDropboxAPI
Pythonで始めるDropboxAPI
 
Freer Monads, More Extensible Effects
Freer Monads, More Extensible EffectsFreer Monads, More Extensible Effects
Freer Monads, More Extensible Effects
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
Implicit Explicit Scala
Implicit Explicit ScalaImplicit Explicit Scala
Implicit Explicit Scala
 
Replace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JPReplace Output Iterator and Extend Range JP
Replace Output Iterator and Extend Range JP
 
Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。Fork/Join Framework。そしてLambdaへ。
Fork/Join Framework。そしてLambdaへ。
 
テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式テンプレートメタプログラミング as 式
テンプレートメタプログラミング as 式
 
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
 
Haskell Lecture 2
Haskell Lecture 2Haskell Lecture 2
Haskell Lecture 2
 
Scala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみたScala 初心者が米田の補題を Scala で考えてみた
Scala 初心者が米田の補題を Scala で考えてみた
 

More from Yuichi Adachi

Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Yuichi Adachi
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみるYuichi Adachi
 
Swift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol ExtensionSwift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol ExtensionYuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Yuichi Adachi
 
続・ゲンバのSwift
続・ゲンバのSwift続・ゲンバのSwift
続・ゲンバのSwiftYuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Yuichi Adachi
 
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Yuichi Adachi
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計Yuichi Adachi
 
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear AlgebraYuichi Adachi
 
Swiftの新機能 Optional
Swiftの新機能 OptionalSwiftの新機能 Optional
Swiftの新機能 OptionalYuichi Adachi
 
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗したユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗したYuichi Adachi
 

More from Yuichi Adachi (12)

Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28Seminar on Quantum Computation & Quantum Information part28
Seminar on Quantum Computation & Quantum Information part28
 
Swift2.x を Scala からみる
Swift2.x を Scala からみるSwift2.x を Scala からみる
Swift2.x を Scala からみる
 
Swift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol ExtensionSwift2 の新機能 Protocol Extension
Swift2 の新機能 Protocol Extension
 
Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19Seminar on Quantum Computation & Quantum Information part19
Seminar on Quantum Computation & Quantum Information part19
 
続・ゲンバのSwift
続・ゲンバのSwift続・ゲンバのSwift
続・ゲンバのSwift
 
Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15Seminar on Quantum Computation & Quantum Information part15
Seminar on Quantum Computation & Quantum Information part15
 
ゲンバのSwift
ゲンバのSwiftゲンバのSwift
ゲンバのSwift
 
Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14Seminar on Quantum Computation & Quantum Information part14
Seminar on Quantum Computation & Quantum Information part14
 
VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計VIPER アーキテクチャによる iOS アプリの設計
VIPER アーキテクチャによる iOS アプリの設計
 
[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra[iOS8] 新たな線形代数ライブラリ Linear Algebra
[iOS8] 新たな線形代数ライブラリ Linear Algebra
 
Swiftの新機能 Optional
Swiftの新機能 OptionalSwiftの新機能 Optional
Swiftの新機能 Optional
 
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗したユニットテスト初学者がKiwiFramework非同期テストで失敗した
ユニットテスト初学者がKiwiFramework非同期テストで失敗した
 

Recently uploaded

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Recently uploaded (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Applicative functor

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n