Slide 1

Slide 1 text

!ϓϩάϥϚͷͨΊͷ" Ϟφυ ݍ࿦ ϓϩάϥϚͷͨΊͷݍ࿦ษڧձDBUQH Ҵݟହ޺!JOBNJZ

Slide 2

Slide 2 text

Ҵݟହ޺!JOBNJZ "CFNB57
 J04ΤϯδχΞ 4XJGU)BTLFMM&MN ݍ࿦ྺ೥ J04%$ొஃ

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

ϒϩάهࣄ w ݍ࿦ͷΦεεϝษڧ๏ʢϓϩάϥϚ޲͚ʣ2JJUB w J04%$+BQBOʮݍ࿦ͱ4XJGU΁ͷԠ༻ʯൃදεϥΠυϝϞ 2JJUB w J04%$+BQBOͰൃදͨ͠ʮݍ࿦ͱ4XJGU΁ͷԠ༻ʯͷิ଍ 2JJUB

Slide 6

Slide 6 text

!ϓϩάϥϚͷͨΊͷ" Ϟφυೖ໳

Slide 7

Slide 7 text

ϓϩάϥϚͷͨΊͷϞφυೖ໳ ശͰߟ͑Δ'VODUPSɺ"QQMJDBUJWFͦͯ͠.POBE2JJUB

Slide 8

Slide 8 text

!ϓϩάϥϚͷͨΊͷ" Ϟφυ ݍ࿦

Slide 9

Slide 9 text

ͳͥϓϩάϥϚ͸ Ϟφυʹऒ͔ΕΔͷ͔ʁ

Slide 10

Slide 10 text

No content

Slide 11

Slide 11 text

ؔ਺ܕϓϩάϥϛϯά αʔόʔαΠυ։ൃ

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

ΫϥΠΞϯτ։ൃ ΦϒδΣΫτࢤ޲ʴؔ਺ܕ

Slide 14

Slide 14 text

ΫϥΠΞϯτ։ൃݴޠͷॆ࣮ʢྫɿ4XJGUʣ w0QUJPOBMDIBJOJOH •view?.superview?.frame ==
 view.flatMap { $0.superview }.map { $0.frame } w1SPNJTF'VUVSF •sendRequest(req).then { nextRequest($0) } wؔ਺ܕϦΞΫςΟϒϓϩάϥϛϯά wObservable.flatMap(merge, concat, first, latest, race, …)

Slide 15

Slide 15 text

// RxSwiftΛ࢖ͬͨɺΠϯΫϦϝϯλϧαʔνͷྫ searchBar.rx.text .debounce(0.1, scheduler: backgroundScheduler) .flatMapLatest { API.fetchData(query: $0) } .map { $0.results.map(SectionModel.init) } .observeOn(mainScheduler) .bind(to: tableView.rx.items( cellIdentifier: "Cell", configureCell: { index, model, cell in cell.textLabel?.text = model } ) .disposed(by: disposeBag)

Slide 16

Slide 16 text

// RxSwiftΛ࢖ͬͨɺΠϯΫϦϝϯλϧαʔνͷྫ searchBar.rx.text .debounce(0.1, scheduler: backgroundScheduler) .flatMapLatest { API.fetchData(query: $0) } .map { $0.results.map(SectionModel.init) } .observeOn(mainScheduler) .bind(to: tableView.rx.items( cellIdentifier: "Cell", configureCell: { index, model, cell in cell.textLabel?.text = model } ) .disposed(by: disposeBag)

Slide 17

Slide 17 text

Ϟφυ flatMap / then / >>=

Slide 18

Slide 18 text

ͦͷଞͷϞφυ׆༻ࣄྫ w)BTLFMMEPߏจ4DBMBGPS಺แදه %4- w&JUIFSʢΤϥʔॲཧʣ w454UBUF ঢ়ଶૢ࡞ w*0ʢ෭࡞༻ʣ w$PODVSSFOUʢฒྻॲཧʣ w1BSTFDʢߏจղੳʣ

Slide 19

Slide 19 text

Ϟφυߏ଄Խఆཧͷͭͷجຊ੍ޚߏ଄Λ΋ͭ ॱ࣍ ˺"QQMJDBUJWF 
 ϓϩάϥϜʹه͞Εͨॱʹɺஞ࣍ॲཧΛߦͳ͍ͬͯ͘ ൓෮ ˺'VODUPS 
 Ұఆͷ৚͕݅ຬͨ͞Ε͍ͯΔؒॲཧΛ܁Γฦ͢ ෼ذ ˺.POBE 
 ͋Δ৚͕݅੒ཱ͢ΔͳΒॲཧ"Λɺͦ͏Ͱͳ͚Ε͹ॲཧ#Λߦ͏

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

A monad is just a monoid in the category of endofunctors, 
 what's the problem? ෆ׬શʹ͓ͯ͠Αͦਖ਼͘͠ͳ͍ϓϩάϥϛϯάݴޠখ࢙ ݩωλ͸ɺ.BD-BOFʮݍ࿦ͷجૅʯ

Slide 22

Slide 22 text

Ϟφυ͸୯ͳΔࣗݾؔख ͷݍʹ͓͚ΔϞϊΠυର ৅ͩΑɻԿ͔໰୊Ͱ΋?

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

Ϟφυ͸୯ͳΔࣗݾؔख ͷݍʹ͓͚ΔϞϊΠυର ৅ͩΑɻԿ͔໰୊Ͱ΋?

Slide 25

Slide 25 text

ࣗݾؔखͷݍ ϞϊΠυର৅

Slide 26

Slide 26 text

ؔख Functor

Slide 27

Slide 27 text

ݍ ݍ

Slide 28

Slide 28 text

ݍ ݍ

Slide 29

Slide 29 text

ݍ ݍ

Slide 30

Slide 30 text

ܕͷݍ String [String] Int [Int] Bool [Bool] Array ܕͷݍ f g map(f ) map(g) g ∘ f map(g ∘ f ) map(g) ∘ map(f ) =

Slide 31

Slide 31 text

A B C ݍ F f g g ∘ f ݍ F(f) F(g) F(A) F(B) F(C) F(g ∘ f) F(g) ∘ F(f) =

Slide 32

Slide 32 text

ؔखͷ߹੒ Functor Composition

Slide 33

Slide 33 text

A B C ݍ f g g ∘ f ݍ F(f) F(g) F(A) F(B) F(C) F(g ∘ f) F(g) ∘ F(f) = F

Slide 34

Slide 34 text

ݍ ݍ F A B C f g g ∘ f F( f ) F(g) F(A) F(B) F(C) F(g ∘ f ) F(g) ∘ F( f ) =

Slide 35

Slide 35 text

খ͍͞ݍ খ͍͞ݍ (খ͍͞ݍͷݍ) F A B C f g g ∘ f F( f ) F(g) F(A) F(B) F(C) F(g ∘ f ) F(g) ∘ F( f ) = Cat

Slide 36

Slide 36 text

খ͍͞ݍ খ͍͞ݍ (খ͍͞ݍͷݍ) F A B C f g g ∘ f F( f ) F(g) F(A) F(B) F(C) F(g ∘ f ) F(g) ∘ F( f ) = Cat খ͍͞ݍ G G(F( f )) G(F(g)) G(F(A)) G(F(B)) G(F(C)) G(F(g ∘ f )) G(F(g)) ∘ G(F( f )) =

Slide 37

Slide 37 text

খ͍͞ݍ খ͍͞ݍ (খ͍͞ݍͷݍ) F A B C f g g ∘ f F( f ) F(g) F(A) F(B) F(C) F(g ∘ f ) F(g) ∘ F( f ) = Cat খ͍͞ݍ G G(F( f )) G(F(g)) G(F(A)) G(F(B)) G(F(C)) G(F(g ∘ f )) G(F(g)) ∘ G(F( f )) = G ∘ F

Slide 38

Slide 38 text

A B C ݍ G ∘ F f g g ∘ f ݍ G(F(f)) G(F(g)) G(F(A)) G(F(B)) G(F(g ∘ f)) G(F(g)) ∘ G(F(f)) = G(F(C))

Slide 39

Slide 39 text

(খ͍͞ݍͷݍ) F C D Cat

Slide 40

Slide 40 text

(খ͍͞ݍͷݍ) F G C D E Cat G ∘ F ؔखͷ߹੒

Slide 41

Slide 41 text

(খ͍͞ݍͷݍ) F G C D E Cat G ∘ F I I I ߃౳ؔख ؔखͷ߹੒

Slide 42

Slide 42 text

(খ͍͞ݍͷݍ) Cat F G C D E G ∘ F E′ H H ∘ G (H ∘ G) ∘ F H ∘ (G ∘ F) ྆ऀ͸౳͍͠ (݁߹཯Λຬͨ͢)

Slide 43

Slide 43 text

ؔखݍ Functor Category

Slide 44

Slide 44 text

(খ͍͞ݍͷݍ) Cat F C D

Slide 45

Slide 45 text

(খ͍͞ݍͷݍ) Cat C D F H G

Slide 46

Slide 46 text

(খ͍͞ݍͷݍ) Cat C D F H G α β

Slide 47

Slide 47 text

A B F f H F(A) F(B) F(f) α C D G(A) G(B) G(f) H(A) H(B) H(f) β G αA αB βA βB

Slide 48

Slide 48 text

A B F f H F(A) F(B) F(f) α C D G(A) G(B) G(f) H(A) H(B) H(f) β G αA αB βA βB β ∘ α βA ∘ αA βB ∘ αB ࣗવม׵ͷ ਨ௚߹੒
 (݁߹཯Λຬͨ͢)

Slide 49

Slide 49 text

(খ͍͞ݍͷݍ) Cat C D F H G α β ؔखݍ DC

Slide 50

Slide 50 text

(ؔखݍ) α β F G H DC

Slide 51

Slide 51 text

α β F G H β ∘ α id id id ߃౳ࣗવม׵ ࣗવม׵ͷ(ਨ௚)߹੒ (݁߹཯Λຬͨ͢) (ؔखݍ) DC

Slide 52

Slide 52 text

ࣗݾؔखͷݍ Category of Endofunctors

Slide 53

Slide 53 text

(খ͍͞ݍͷݍ) Cat C D F H G

Slide 54

Slide 54 text

(খ͍͞ݍͷݍ) Cat C C F H G

Slide 55

Slide 55 text

(খ͍͞ݍͷݍ) Cat C F G H

Slide 56

Slide 56 text

(খ͍͞ݍͷݍ) Cat C G ∘ F F G H I

Slide 57

Slide 57 text

(খ͍͞ݍͷݍ) Cat C G ∘ F F G H I ࣗݾؔखͷݍ CC α β

Slide 58

Slide 58 text

α β F G H (ؔखݍ) DC

Slide 59

Slide 59 text

α β F G H (ࣗݾؔखͷݍ) CC I G ∘ F ߃౳ؔख (୯Ґݩ) ؔखͷ߹੒ (ೋ߲ԋࢉ)

Slide 60

Slide 60 text

ϞϊΠυ Monoid

Slide 61

Slide 61 text

ϞϊΠυ ೋ߲ԋࢉ ୯Ґݩͷଘࡏ

Slide 62

Slide 62 text

(Int, +, 0) a + 0 = a 0 + a = a (a + b) + c = a + (b + c) ϞϊΠυͷྫ

Slide 63

Slide 63 text

(Int, *, 1) a * 1 = a 1 * a = a (a * b) * c = a * (b * c) ϞϊΠυͷྫ

Slide 64

Slide 64 text

(String, +, ””) a + ”” = a ”” + a = a (a + b) + c = a + (b + c) ϞϊΠυͷྫ

Slide 65

Slide 65 text

(Array, +, []) a + [] = a [] + a = a (a + b) + c = a + (b + c) ϞϊΠυͷྫ

Slide 66

Slide 66 text

(Bool, &&, true) a && true = a true && a = a (a && b) && c = a && (b && c) ϞϊΠυͷྫ

Slide 67

Slide 67 text

(Bool, ||, false) a || false = a false || a = a (a || b) || c = a || (b || c) ϞϊΠυͷྫ

Slide 68

Slide 68 text

(Int, max, minBound) max(a, minBound) = a max(minBound, a) = a max(max(a, b), c)
 = max(a, max(b, c)) ϞϊΠυͷྫ

Slide 69

Slide 69 text

(Int, min, maxBound) min(a, maxBound) = a min(maxBound, a) = a min(min(a, b), c)
 = min(a, min(b, c)) ϞϊΠυͷྫ

Slide 70

Slide 70 text

ϞϊΠυ w ू߹ɺೋ߲ԋࢉ υοτ ɺ୯Ґݩͷͭ૊
 ͰɺҎԼͷ৚݅Λຬͨ͢ɿ w ݁߹཯೚ҙͷʹ͍ͭͯ w ୯Ґݩ೚ҙͷʹ͍ͭͯ (a ⋅ b) ⋅ c = a ⋅ (b ⋅ c) e ⋅ a = a ⋅ e = e a, b, c ∈ M a ∈ M M ⋅ e ∈ M (M, ⋅ ,e) (M, ⋅ ,e)

Slide 71

Slide 71 text

// Swift ʹ͓͚ΔϞϊΠυ protocol Monoid { static func <> (lhs: Self, rhs: Self) -> Self static var empty: Self } -- Haskell ʹ͓͚ΔϞϊΠυ class Monoid a where (<>) :: a -> a -> a mempty :: a

Slide 72

Slide 72 text

ݍ࿦ʹ͓͚ΔϞϊΠυ Monoid in Category Theory

Slide 73

Slide 73 text

Int 1 … 3 (+): (Int,Int) -> Int ΛࣹͰදݱ͍ͨ͠l 0 2 ୯Ґݩ

Slide 74

Slide 74 text

Int 0 1 2 … 3 ୯Ґݩ ϖΞΛ࡞ͬͯɾɾɾ ೋ߲ԋࢉʁ ͜ͷॻ͖ํ͸ݍ࿦Ͱ͸ͳ͍ ΛࣹͰදݱ͍ͨ͠l (+): (Int,Int) -> Int

Slide 75

Slide 75 text

σΧϧτੵ ੵू߹ (0,0) (1,0) (0,2) … (1,2) Int 0 1 2 … 3 (Int,Int) ͱ΋ॻ͘ Int × Int Int 0 1 2 … 3 Int 0 1 2 … 3 ϖΞ λϓϧ (+)

Slide 76

Slide 76 text

(0,0) (1,0) (0,2) … (1,2) Int 0 1 2 … 3 (+) ೋ߲ԋࢉΛIntͷ ʮ֎ʯͰఆٛ͢Δ ಺෦Ͱࣹ(ߏ଄)Λ ߟ͑ͳ͍ (Int,Int) Int 0 1 2 … 3 Int 0 1 2 … 3 ϖΞ λϓϧ σΧϧτੵ ੵू߹ σΧϧτੵ Int × Int

Slide 77

Slide 77 text

(+) : (Int, Int) -> Int ΧϦʔԽ͢Δͱɺ (+) : Int -> (Int -> Int) ϖΞΛ࡞ͬͯɺIntʹม׵ ϖΞΛ࡞Βͣɺ IntΛʮࣗݾؔ਺ʯʹม׵ ͱ͜ΖͰɾɾɾ

Slide 78

Slide 78 text

୯Ұର৅ݍ Int (0+) (1+) (2+) Int (0+) Int -> Int 0 1 2 … 3 (1+) (2+) … (3+) (+)

Slide 79

Slide 79 text

୯Ұର৅ݍ Int (0+) (1+) (2+) Int (0+) Int -> Int 0 1 2 … 3 (1+) (2+) … (3+) (+) ߃౳ม׵ ࣹͳͷͰɺ ߹੒Մೳ

Slide 80

Slide 80 text

0 + 1 + 2 (0+) ∘ (1+) ∘ (2+) (+)ͷ෦෼ద༻ ࣗݾؔ਺Խ Int (0+) Int -> Int 0 1 2 … 3 (1+) (2+) … (3+) (+)

Slide 81

Slide 81 text

Int (0+) Int -> Int 0 1 2 … 3 (1+) (2+) … (3+) { f in f(0) } \f -> f 0 0 + 1 + 2 (0+) ∘ (1+) ∘ (2+) ୯ҐݩΛద༻ ஋ʹ໭͢ PS

Slide 82

Slide 82 text

Int (0+) Int -> Int 0 1 2 … 3 (1+) (2+) … (3+) 0 + 1 + 2 (0+) ∘ (1+) ∘ (2+) ͷ෦෼ద༻ ࣗݾؔ਺Խ ୯ҐݩΛద༻ ஋ʹ໭͢ ୯Ґݩ ೋ߲ԋࢉ ୯Ґݩ ೋ߲ԋࢉ ࣗݾؔ਺͸ ϞϊΠυʂ

Slide 83

Slide 83 text

0 + 1 + 2 ͷ෦෼ద༻ ؔ਺Խ ୯ҐݩΛద༻ ஋ʹ໭͢ (0+) ∘ (1+) ∘ (2+) ୯Ґݩ ೋ߲ԋࢉ έΠϦʔදݱ ೚ҙͷϞϊΠυ͸ɺͦͷࣗݾ४ಉܕ ˺ࣗݾؔ਺ ͷϞϊΠυͷ෦෼ϞϊΠυ Int (0+) Int -> Int 0 1 2 … 3 (1+) (2+) … (3+)

Slide 84

Slide 84 text

ϞϊΠυର৅ Monoid Object

Slide 85

Slide 85 text

σΧϧτੵ ੵू߹ (0,0) (1,0) (0,2) … (1,2) Int 0 1 2 … 3 Int 0 1 2 … 3 Int 0 1 2 … 3 ೋ߲ԋࢉΛIntͷ ʮ֎ʯͰఆٛ͢Δ ୯Ґݩ (Int,Int) ϖΞ ಺෦Ͱࣹ(ߏ଄)Λ ߟ͑ͳ͍ λϓϧ (+)

Slide 86

Slide 86 text

(Int,Int) Int 0 1 2 … 3 ೋ߲ԋࢉΛIntͷ ʮ֎ʯͰఆٛ͢Δ ୯Ґݩ (+)

Slide 87

Slide 87 text

Int 0 1 2 … 3 ೋ߲ԋࢉΛIntͷ ʮ֎ʯͰఆٛ͢Δ ୯Ґݩ () ୯ҐݩΛܾΊΔࣹΛ ʮ֎ʯͰఆٛ͢Δ(ҰൠԽݩ) Ұݩू߹ (Int,Int) 0 (+) Unit

Slide 88

Slide 88 text

ϞϊΠυର৅ (M, μ, η) μ η 1 ୯Ґࣹ ೋ߲ԋࢉ M × M M

Slide 89

Slide 89 text

Int 0 1 2 … 3 Unit () (Int,Int) ⟨ Int, Int ⟩ ϖΞ 0 (+) = Int ⊗ Int ⊗ = (, ) (Int × IntͷҰൠԽ)

Slide 90

Slide 90 text

(Int × IntͷҰൠԽ) Int 0 1 2 … 3 () () ϖΞ(ܕͰ͸ͳ͍) λϓϧܕ ʮϖΞΛ࡞Δʯ͜ͱͱʮϖΞΛܕͱ Έͳ͢(λϓϧ)ʯ͜ͱΛ෼཭͢Δ ςϯιϧੵ (ޙड़) (Int,Int) Int ⊗ Int = ⟨ Int, Int ⟩ ϖΞ ⊗ = (, )

Slide 91

Slide 91 text

ϞϊΠυର৅ (M, μ, η) μ η I M ⊗ M M ୯Ґࣹ ೋ߲ԋࢉ

Slide 92

Slide 92 text

(σΧϧτੵͷҰൠԽ) ⊗ ୯Ґର৅ (Ұݩू߹ͷҰൠԽ) μ η I M ⊗ M M ⊗ ςϯιϧੵ

Slide 93

Slide 93 text

ϞϊΠμϧݍ Monoidal Category

Slide 94

Slide 94 text

ςϯιϧੵ ⊗ : C × C → C M I M ⊗ M ⊗ ୯Ґର৅ (ϞϊΠμϧݍ) C (C, ⊗ ,I, α, λ, ρ)

Slide 95

Slide 95 text

M I M ⊗ M M ⊗ I M ⊗ M′ (M ⊗ M′) ⊗ M′′ طଘͷର৅ͷϖΞ͔Β ৽ͨͳର৅Λ࡞Γग़ͤΔ ςϯιϧੵ ⊗ : C × C → C (ϞϊΠμϧݍ) C (C, ⊗ ,I, α, λ, ρ) ⊗

Slide 96

Slide 96 text

ςϯιϧੵ ⟨M ⊗ M′, M′′⟩ ੵͷݍ I M M ⊗ M ⟨M, M⟩ C × C M ⊗ M′ ⟨M, M′⟩ ⋯ ⊗ (M ⊗ M′) ⊗ M′′ ݍͷϖΞ ⊗ ⋯ (ϞϊΠμϧݍ) C (C, ⊗ ,I, α, λ, ρ) ૒ؔख

Slide 97

Slide 97 text

ϞϊΠμϧݍ wςϯιϧੵ w୯Ґର৅ w݁߹ࢠ wࠨ୯Ґࢠ wӈ୯Ґࢠ ⊗ : C × C → C I ∈ Ob(C) αA,B,C : (A ⊗ B) ⊗ C ≅ ⟶ A ⊗ (B ⊗ C) λA : I ⊗ A ≅ ⟶ A ρA : A ⊗ I ≅ ⟶ A ౳߸ͷͱ͖ɺ ετϦΫτϞϊΠμϧݍ (C, ⊗ ,I, α, λ, ρ)

Slide 98

Slide 98 text

ϞϊΠμϧݍ (C, ⊗ ,I, α, λ, ρ) ݁߹ࢠ ݁߹ॱংͷೖΕସ͑Մೳ ୯Ґࢠ ୯Ґݩ Λ௥ՃɾআڈՄೳ I

Slide 99

Slide 99 text

μ η I M ⊗ M M ϞϊΠυʹʮϞϊΠμϧݍʯʹ͓͚ΔʮϞϊΠυର৅ʯ (ϞϊΠμϧݍ) (C, ⊗ ,I, α, λ, ρ) C

Slide 100

Slide 100 text

࠶ߟɿࣗݾؔखͷݍ Revisiting Category of Endofunctors

Slide 101

Slide 101 text

α β F G H I G ∘ F ߃౳ؔख (୯Ґݩ) ؔखͷ߹੒ (ೋ߲ԋࢉ) (ࣗݾؔखͷݍ) CC

Slide 102

Slide 102 text

ؔखͷ߹੒ (ೋ߲ԋࢉ) (ࣗݾؔखͷݍ) CC ߃౳ؔख (୯Ґݩ) F I F ∘ F ∘

Slide 103

Slide 103 text

M ⊗ M ςϯιϧੵ ⊗ : C × C → C ୯Ґର৅ M I M ⊗ M (ϞϊΠμϧݍ) C (C, ⊗ ,I, α, λ, ρ) ⊗

Slide 104

Slide 104 text

ؔखͷ߹੒ˠςϯιϧੵ ߃౳ؔखˠ୯Ґର৅ ؔखͷ߹੒ʹ͍ͭͯ ݁߹཯ɾ୯Ґ཯͕੒Γཱͭ

Slide 105

Slide 105 text

ࣗݾؔखͷݍ ʹετϦΫτϞϊΠμϧݍ

Slide 106

Slide 106 text

Ϟφυ Monad

Slide 107

Slide 107 text

F(C) D ݍ F C ݍ U(D) ࣹͷू߹ U ≅

Slide 108

Slide 108 text

F(C) D ݍ F U C U(D) ݍ F(U(D)) U(F(C)) f f F(f) U(f) counitD ηC ϵD unitC = =

Slide 109

Slide 109 text

F(C) D ݍ F U C ݍ F(U(D)) U(F(C)) ηC ϵD

Slide 110

Slide 110 text

F(C) D ݍ F U C ݍ F(U(D)) U(F(C)) ηC ϵD U(F(U(F(C)))) F(U(F(C)))

Slide 111

Slide 111 text

F(C) D ݍ F U C ݍ F(U(D)) U(F(C)) ηC U(F(U(F(C)))) F(U(F(C))) ϵD ϵF(C)

Slide 112

Slide 112 text

F(C) D ݍ F U C ݍ F(U(D)) U(F(C)) ηC U(F(U(F(C)))) F(U(F(C))) ϵD ϵF(C) UϵF(C)

Slide 113

Slide 113 text

C ݍ T(C) ηC T2(C) T = UF UϵF(C)

Slide 114

Slide 114 text

C ݍ ηC T T ∘ T I T(C) T2(C) UϵF(C)

Slide 115

Slide 115 text

C ݍ ηC T T ∘ T μ η I T(C) T2(C) UϵF = ࣗݾؔखͷݍ UϵF(C)

Slide 116

Slide 116 text

μ η I M ⊗ M M ϞϊΠυʹʮϞϊΠμϧݍʯʹ͓͚ΔʮϞϊΠυର৅ʯ (ϞϊΠμϧݍ) (C, ⊗ ,I, α, λ, ρ) C

Slide 117

Slide 117 text

T T ∘ T μ η Ϟφυʹʮࣗݾؔखͷݍ(ετϦΫτϞϊΠμϧݍ)ʯ ʹ͓͚ΔʮϞϊΠυର৅ʯ (ࣗݾؔखͷݍ) CC (CC, ∘ ,I) I

Slide 118

Slide 118 text

Ϟφυ wࣗݾؔख wࣗવม׵ wࣗવม׵ T : C → C μ : T ⊗ T → T η : I → T μ ∘ Tμ = μ ∘ μT μ ∘ Tη = μ ∘ ηT = 1T Ϟφυଇ ݁߹཯ ୯Ґ཯ (T, μ, η)

Slide 119

Slide 119 text

Ϟφυ (T, μ, η) μ ∘ Tμ = μ ∘ μT μ ∘ Tη = μ ∘ ηT = 1T ݁߹཯ ୯Ґ཯

Slide 120

Slide 120 text

ʹࣗݾؔखͷݍʹ͓͚ΔϞϊΠυର৅ (T, μ, η) Ϟφυ

Slide 121

Slide 121 text

)BTLFMMʹ͓͚ΔϞφυ class Functor f where fmap :: (a -> b) -> f a -> f b class Functor f => Applicative f where pure :: a -> f a (<*>) :: f (a -> b) -> f a -> f b class Applicative m => Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a return = pure (ࣗݾ)ؔख ΞϓϦΧςΟϒؔख Ϟφυ

Slide 122

Slide 122 text

join :: (Monad m) => m (m a) -> m a join x = x >>= id )BTLFMMʹ͓͚ΔϞφυ class Applicative m => Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a return = pure Ϟφυ

Slide 123

Slide 123 text

join :: (Monad m) => m (m a) -> m a join x = x >>= id )BTLFMMʹ͓͚ΔϞφυ class Applicative m => Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a return = pure ࣗવม׵ η : I → T

Slide 124

Slide 124 text

join :: (Monad m) => m (m a) -> m a join x = x >>= id )BTLFMMʹ͓͚ΔϞφυ class Applicative m => Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a return = pure μ : T ⊗ T → T ࣗવม׵

Slide 125

Slide 125 text

join :: (Monad m) => m (m a) -> m a join x = x >>= id )BTLFMMʹ͓͚ΔϞφυ class Applicative m => Monad m where (>>=) :: m a -> (a -> m b) -> m b return :: a -> m a return = pure flatMap

Slide 126

Slide 126 text

ϓϩάϥϛϯάͷੈքͰ͸ɺ joinΑΓ΋ flatMap(>>=)ͷํ͕ॏཁ

Slide 127

Slide 127 text

)BTLFMMʹ͓͚ΔflatMap == (>>=) (>>=) :: m a -> (a -> m b) -> m b ͜ͷܕͷҙຯ͸Կʁ

Slide 128

Slide 128 text

ΫϥΠεϦ߹੒ͱ ΫϥΠεϦɾτϦϓϧ Kleisli Composition & Kleisli Triple

Slide 129

Slide 129 text

C B A C ࣹͷ߹੒͕Մೳ

Slide 130

Slide 130 text

T(B) C B A T(C) C Ϟφυ͕ίυϝΠϯ(ऴҬ)ͷ ࣹ͸߹੒Ͱ͖ͳ͍

Slide 131

Slide 131 text

C B A C B A T(B) T(C) ⋯ C CT ΫϥΠεϦݍ ⋯ ⋯ f g gT fT ΫϥΠεϦࣹ (A -> T(B)ͷܗͷࣹ)

Slide 132

Slide 132 text

C B A C B A T(B) T(C) ⋯ C CT ⋯ ⋯ f g gT fT ྆ऀ ͷࣹͷू߹ Λ ରԠ͍ͤͨ͞

Slide 133

Slide 133 text

f g C B A C B A T(B) T(C) ⋯ ⋯ C CT ⋯ gT fT gT ∘ fT ରԠͰ͖Δͱɺ ݍͷࣹͷ߹੒A -> C͕ ݍ ͷΫϥΠεϦࣹͷ߹੒ A -> T(C)ʹରԠ͢Δ CT C

Slide 134

Slide 134 text

F G C B A C B A T(B) T(C) ⋯ C CT ⋯ ⋯ f g gT fT ͱͷ ਵ൐ؔखΛߟ͑Δ CT C

Slide 135

Slide 135 text

C B A C B A T(B) T(C) ⋯ C CT ⋯ ⋯ f g gT fT F G ຒΊࠐΈؔख ର৅ͱࣹΛ ͦͷ··ࣸ͢ fT ≠ F(f) ஫ҙɿ

Slide 136

Slide 136 text

f g C B A F G C B A T(B) T(C) ⋯ ⋯ C CT T(A) ⋯ gT fT G(fT ) G(gT ) ֦ுؔख ͷର৅Λ ͷର৅ʹࣸ͢ A CT C T(A) G(A) = T(A) G(fT ) ≠ T(f) ஫ҙɿ

Slide 137

Slide 137 text

f g C B A F G C B A T(B) T(C) ⋯ C CT T(A) F gT fT G(fT ) G(gT ) T2(C) T2(B) T(f ) T(g) μB ηB ηC μA ηA ͸ϞφυͳͷͰ ͜ΕΒͷࣹ͕ଘࡏ͢Δ T μC

Slide 138

Slide 138 text

g C B A F G C B ⋯ C CT T(A) F gT fT G(fT ) G(gT ) T2(B) gT ∘ fT T(f ) μB ηB μA ηA f A T(B) T(C) T2(C) T(g) μC μC ∘ T(g) ∘ f ηC ͱͷΫϥΠεϦ߹੒ f g

Slide 139

Slide 139 text

ΫϥΠεϦ߹੒ C A gT ∘ fT f g B A T(B) T(C) μC ∘ T(g) ∘ f g < = < f = def < = < /PUFΫϥΠεϦ߹੒͸ ݁߹཯ɾ୯Ґ཯Λຬͨ͢

Slide 140

Slide 140 text

wΫϥΠεϦ߹੒ ࢀߟ ؔ਺߹੒ ࠨ୯Ґ཯ return <=< f ≡ f ӈ୯Ґ཯ f <=< return ≡ f ݁߹཯ (h <=< g) <=< f ≡ h <=< (g <=< f) Ϟφυଇ ΫϥΠεϦ߹੒ (<=<) :: (b -> m c) -> (a -> m b) -> (a -> m c) (.) :: (b -> c) -> (a -> b) -> (a -> c) ࠨ୯Ґ཯ id . f ≡ f ӈ୯Ґ཯ f . id ≡ f ݁߹཯ (h . g) . f ≡ h . (g . f)

Slide 141

Slide 141 text

)BTLFMMʹ͓͚ΔΫϥΠεϦ߹੒ (<=<) :: Monad m => (a -> m b) -> m a -> m b g <=< f = join . fmap g . f μC ∘ T(g) ∘ f g < = < f = def

Slide 142

Slide 142 text

)BTLFMMʹ͓͚ΔΫϥΠεϦ߹੒ ࣮ࡍͷίʔυ -- | Left-to-right composition of Kleisli arrows. (>=>) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c) f >=> g = \x -> f x >>= g -- | Right-to-left composition of Kleisli arrows. -- > (.) :: (b -> c) -> (a -> b) -> a -> c -- > (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c) g <=< f = \x -> g =<< f x —- (<=<) = flip (>=>)

Slide 143

Slide 143 text

-- | Left-to-right composition of Kleisli arrows. (>=>) :: Monad m => (a -> m b) -> (b -> m c) -> (a -> m c) f >=> g = \x -> f x >>= g -- | Right-to-left composition of Kleisli arrows. -- > (.) :: (b -> c) -> (a -> b) -> a -> c -- > (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m c (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c) g <=< f = \x -> g =<< f x —- (<=<) = flip (>=>) (=<<) :: Monad m => (a -> m b) -> m a -> m b f =<< x = x >>= f —- (=<<) = flip (>>=) )BTLFMMʹ͓͚ΔΫϥΠεϦ߹੒ ࣮ࡍͷίʔυ flip(flatMap)

Slide 144

Slide 144 text

(=<<) :: (a -> m b) -> m a -> m b ͜ͷܕͷҙຯ͸Կʁ )BTLFMMʹ͓͚Δflip(flatMap) == (=<<)

Slide 145

Slide 145 text

(=<<) :: (a -> m b) -> m a -> m b ͜ͷܕͷҙຯ͸Կʁ ʮa -> m bʯͷࣹ͔Β ʮm a -> m bʯͷࣹʹࣸؔ͢਺ )BTLFMMʹ͓͚Δflip(flatMap) == (=<<)

Slide 146

Slide 146 text

A T(B) C T(A) ηA CT B A g C B T(C) ⋯ G(gT ) T2(C) T(g) ηB ηC μA μC C gT fT T2(B) T(f ) μB F G G(fT ) f

Slide 147

Slide 147 text

A T(B) C T(A) ηA CT B A g C B T(C) ⋯ G(gT ) T2(C) T(g) ηB ηC μA μC C gT fT T2(B) T(f ) μB F G = < < ֦ுԋࢉ

Slide 148

Slide 148 text

A T(B) C T(A) ηA CT B A g C B T(C) ⋯ G(gT ) T2(C) T(g) ηB ηC μA μC C gT fT T2(B) T(f ) μB = < < ֦ுԋࢉ F G ֦ுؔख

Slide 149

Slide 149 text

F G f A T(B) C T(A) ηA CT B A g C B T(C) ⋯ G(gT ) T2(C) T(g) ηB ηC μA μC C gT fT G(fT ) T2(B) T(f ) μB G(fT ) = μB ∘ T(f) ӈล͸Λ Ҿ਺ʹऔΔؔ਺ f

Slide 150

Slide 150 text

Ϟφυɾ֦ுԋࢉ = < < A T(B) T(A) B A fT T2(B) T(f ) μB μB ∘ T(f) f = < < = def f

Slide 151

Slide 151 text

Ϟφυɾ֦ுԋࢉ f A T(B) T(A) B A fT T2(B) T(f ) μB f = < < Λ࢖Θͣ Λ࢖ͬͯϞφυΛදݱ͢Δ μ = < < = < < ֦ுԋࢉ = < <

Slide 152

Slide 152 text

ΫϥΠεϦɾτϦϓϧ wࣗݾؔख wࣗવม׵ w֦ுԋࢉ (T, η, = < < ) T : C → C η : I → T = < <: (A → T(B)) → T(A) → T(B) (g = < < ) ∘ (f = < < ) = (((g = < < ) ∘ f) = < < ) (η = < < ) = 1T ݁߹཯ ୯Ґ཯ (f = < < ) ∘ η = f Ϟφυଇ ,MFJTMJ4UBSͱ΋ݴ͏ f* def = (f = < < )

Slide 153

Slide 153 text

ΫϥΠεϦɾτϦϓϧ ʹϞφυͷjoinΛ࢖Θͣ flip(flatMap)Λ࢖ͬͨผͷܗ (T, η, = < < )

Slide 154

Slide 154 text

)BTLFMMʹ͓͚Δ֦ுԋࢉ (=<<) :: Monad m => (a -> m b) -> m a -> m b (=<<) f = join . fmap f μB ∘ T(f) f = < < = def = < <

Slide 155

Slide 155 text

ࢀߟɿjoin, <=<, =<< ͷؔ܎ -- from `join` join :: (Monad m) => m (m a) -> m a join x = id =<< x join x = (id <=< id) x -- from `<=<` (<=<) :: Monad m => (b -> m c) -> (a -> m b) -> (a -> m c) g <=< f = \a -> g =<< f a g <=< f = join . fmap g . f -- from `=<<` (=<<) :: Monad m => (a -> m b) -> m a -> m b f =<< m = (f <=< id) m f =<< m = (join . fmap f) m

Slide 156

Slide 156 text

wΫϥΠεϦ߹੒ wϞφυflatMap ࠨ୯Ґ཯ return >=> g ≡ g ӈ୯Ґ཯ f >=> return ≡ f ݁߹཯ (f >=> g) >=> h ≡ f >=> (g >=> h) ࠨ୯Ґ཯ return a >>= f ≡ f a ӈ୯Ґ཯ m>>= return ≡ m ݁߹཯ (m >>= f) >>= g ≡ m >>= (\x -> f x >>= g) Ϟφυଇ(flatMap / >>=) (>=>) :: (a -> m b) -> (b -> m c) -> (a -> m c) (>>=) :: m a -> (a -> m b) -> m b (<=<)ͷٯ޲͖ ࠨ͔Βӈ΁ͷΫϥΠεϦ߹੒ f >=> g = \a -> f a >>= g

Slide 157

Slide 157 text

·ͱΊ

Slide 158

Slide 158 text

·ͱΊ wϞφυ wؔखݍɺࣗݾؔखͷݍ wϞϊΠυɺϞϊΠυର৅ɺϞϊΠμϧݍ wࣗݾؔखͷݍʹ͓͚ΔϞϊΠυର৅ wΫϥΠεϦɾτϦϓϧ wjoinͷ୅ΘΓʹflip(flatMap) /=<<Λ࢖͏

Slide 159

Slide 159 text

(T, μ, η) (T, η, = < < )

Slide 160

Slide 160 text

No content

Slide 161

Slide 161 text

͞ΒʹֶͿͨΊʹ w ετϦϯάਤ 4USJOH%JBHSBN .POBET.BEF%J⒏DVMU
 4USJOHEJBHSBNT BEKVODUJPOTBOENPOBET:PV5VCF

Slide 162

Slide 162 text

͞ΒʹֶͿͨΊʹ wϞφυม׵ࢠ .POBE5SBOTGPSNFS wࣗ༝Ϟφυ 'SFF.POBE w'SFFS0QFSBUJPOBMϞφυ ࣗ༝ؔखࣗ༝Ϟφυ wࢦඪ෇͖Ϟφυ *OEFYFE.POBE w&YUFOTJCMF'SFFS&GGFDUT 'SFFS0QFO6OJPO w(SBEFEϞφυ ϞφυͷҰൠԽ

Slide 163

Slide 163 text

ࢀߟจݙ wϞφυ΢ΥʔΫεϧʔ)BTLFMM wϞφυʹ͍ͭͯϞϊΠυɾϞϊΠυݍɾϞϊΠυର৅ɾϞφυٙ೦͸୳ڀͷಈػͰ͋Γɺ୳ڀͷ།Ұͷ໨త͸৴ ೦ͷ֬ఆͰ͋Δɻ wϓϩάϥϛϯάʹ͓͚ΔϞφυͷॳظͷྺ࢙ʹ͍ͭͯ࠶ؼͷ൓෮ wʮϞφυ͸୯ͳΔࣗݾؔखͷݍʹ͓͚ΔϞϊΠυର৅ͩΑɻԿ͔໰୊Ͱ΋ʁʯ2JJUB w)BTLFMMͷ.POBEΛݍ࿦ͷ.POBE,MFJTMJ5SJQMFͱରൺ͢ΔΊ΋Ί΋ wϞφυͷఆٛͱ͔ᐻࢁਖ਼޾ͷΩϚΠϥࣂҭه wϞϊΠυ͔ΒϞφυΛ࡞Δᐻࢁਖ਼޾ͷΩϚΠϥࣂҭه w.POBET.BEF%JGpDVMU w/PUJPOTPG$PNQVUBUJPOBT.POPJET

Slide 164

Slide 164 text

Thanks! Yasuhiro Inami @inamiy