SLIDE 1
t Prr Pr - - PowerPoint PPT Presentation
t Prr Pr - - PowerPoint PPT Presentation
t Prr Pr rtt tr rst
SLIDE 2
SLIDE 3
❖✈❡r✈✐❡✇
✶
▲✐st ❢✉♥❝t✐♦♥s
✷
❈♦♥❞✐t✐♦♥❛❧s
✸
▲✐❢t✐♥❣
✹
▼♦♥❛❞P❧✉s ❢✉♥❝t✐♦♥s
SLIDE 4
■♥tr♦❞✉❝t✐♦♥
❖✈❡r✈✐❡✇
▼♦♥❛❞ ♣♦✇❡r ❝♦♠❡s ❢r♦♠ ✈❡r② ❤✐❣❤ ❞❡❣r❡❡ ♦❢ ❛❜str❛❝t✐♦♥ ❍❛s❦❡❧❧ ❝♦♠❡s ✇✐t❤ ❛ ❧✐❜r❛r② ♦❢ ❢✉♥❝t✐♦♥s t❤❛t ❛r❡ ❞❡✜♥❡❞ ❛❝r♦ss ❛❧❧ ♠♦♥❛❞s ❚❤❡s❡ ❢✉♥❝t✐♦♥s ❝♦rr❡s♣♦♥❞ t♦ ❝♦♥tr♦❧ str✉❝t✉r❡s ✐♥ ♠♦st ✐♠♣❡r❛rt✐✈❡ ❧❛♥❣✉❛❣❡s ■♥ ❢❛❝t ❣✐✈❡♥ t❤❡ do✲♥♦t❛t✐♦♥ ❛♥❞ t❤❡s❡ ❢✉♥❝t✐♦♥s ✇❡ ❝❛♥ ♣r♦❣r❛♠ ✐♥ ❍❛s❦❡❧❧ ✉s✐♥❣ ✐♠♣❡r❛t✐✈❡ ❛♣♣r♦❛❝❤
SLIDE 5
■♥tr♦❞✉❝t✐♦♥
❖✈❡r✈✐❡✇
▼♦♥❛❞ ♣♦✇❡r ❝♦♠❡s ❢r♦♠ ✈❡r② ❤✐❣❤ ❞❡❣r❡❡ ♦❢ ❛❜str❛❝t✐♦♥ ❍❛s❦❡❧❧ ❝♦♠❡s ✇✐t❤ ❛ ❧✐❜r❛r② ♦❢ ❢✉♥❝t✐♦♥s t❤❛t ❛r❡ ❞❡✜♥❡❞ ❛❝r♦ss ❛❧❧ ♠♦♥❛❞s ❚❤❡s❡ ❢✉♥❝t✐♦♥s ❝♦rr❡s♣♦♥❞ t♦ ❝♦♥tr♦❧ str✉❝t✉r❡s ✐♥ ♠♦st ✐♠♣❡r❛rt✐✈❡ ❧❛♥❣✉❛❣❡s ■♥ ❢❛❝t ❣✐✈❡♥ t❤❡ do✲♥♦t❛t✐♦♥ ❛♥❞ t❤❡s❡ ❢✉♥❝t✐♦♥s ✇❡ ❝❛♥ ♣r♦❣r❛♠ ✐♥ ❍❛s❦❡❧❧ ✉s✐♥❣ ✐♠♣❡r❛t✐✈❡ ❛♣♣r♦❛❝❤
SLIDE 6
■♥tr♦❞✉❝t✐♦♥
❖✈❡r✈✐❡✇
▼♦♥❛❞ ♣♦✇❡r ❝♦♠❡s ❢r♦♠ ✈❡r② ❤✐❣❤ ❞❡❣r❡❡ ♦❢ ❛❜str❛❝t✐♦♥ ❍❛s❦❡❧❧ ❝♦♠❡s ✇✐t❤ ❛ ❧✐❜r❛r② ♦❢ ❢✉♥❝t✐♦♥s t❤❛t ❛r❡ ❞❡✜♥❡❞ ❛❝r♦ss ❛❧❧ ♠♦♥❛❞s ❚❤❡s❡ ❢✉♥❝t✐♦♥s ❝♦rr❡s♣♦♥❞ t♦ ❝♦♥tr♦❧ str✉❝t✉r❡s ✐♥ ♠♦st ✐♠♣❡r❛rt✐✈❡ ❧❛♥❣✉❛❣❡s ■♥ ❢❛❝t ❣✐✈❡♥ t❤❡ do✲♥♦t❛t✐♦♥ ❛♥❞ t❤❡s❡ ❢✉♥❝t✐♦♥s ✇❡ ❝❛♥ ♣r♦❣r❛♠ ✐♥ ❍❛s❦❡❧❧ ✉s✐♥❣ ✐♠♣❡r❛t✐✈❡ ❛♣♣r♦❛❝❤
SLIDE 7
■♥tr♦❞✉❝t✐♦♥
❖✈❡r✈✐❡✇
▼♦♥❛❞ ♣♦✇❡r ❝♦♠❡s ❢r♦♠ ✈❡r② ❤✐❣❤ ❞❡❣r❡❡ ♦❢ ❛❜str❛❝t✐♦♥ ❍❛s❦❡❧❧ ❝♦♠❡s ✇✐t❤ ❛ ❧✐❜r❛r② ♦❢ ❢✉♥❝t✐♦♥s t❤❛t ❛r❡ ❞❡✜♥❡❞ ❛❝r♦ss ❛❧❧ ♠♦♥❛❞s ❚❤❡s❡ ❢✉♥❝t✐♦♥s ❝♦rr❡s♣♦♥❞ t♦ ❝♦♥tr♦❧ str✉❝t✉r❡s ✐♥ ♠♦st ✐♠♣❡r❛rt✐✈❡ ❧❛♥❣✉❛❣❡s ■♥ ❢❛❝t ❣✐✈❡♥ t❤❡ do✲♥♦t❛t✐♦♥ ❛♥❞ t❤❡s❡ ❢✉♥❝t✐♦♥s ✇❡ ❝❛♥ ♣r♦❣r❛♠ ✐♥ ❍❛s❦❡❧❧ ✉s✐♥❣ ✐♠♣❡r❛t✐✈❡ ❛♣♣r♦❛❝❤
SLIDE 8
❖✉t❧✐♥❡
✶
▲✐st ❢✉♥❝t✐♦♥s
✷
❈♦♥❞✐t✐♦♥❛❧s
✸
▲✐❢t✐♥❣
✹
▼♦♥❛❞P❧✉s ❢✉♥❝t✐♦♥s
SLIDE 9
▼♦♥❛❞✐❝ Pr❡❧✉❞❡
s❡q✉❡♥❝❡ ❞❡✜♥✐t✐♦♥
s❡q✉❡♥❝❡❴ ✿✿ ▼♦♥❛❞ ♠ ✮ ❬♠ ❛ ❪ ✦ ♠ ✭✮ s❡q✉❡♥❝❡❴ ❂ ❢♦❧❞r ✭> >✮ ✭r❡t✉r♥ ✭✮✮ s❡q✉❡♥❝❡ ✿✿ ▼♦♥❛❞ ♠ ✮ ❬♠ ❛ ❪ ✦ ♠ ❬❛ ❪ s❡q✉❡♥❝❡ ❂ ❢♦❧❞r ♠❝♦♥s ✭r❡t✉r♥ ❬ ❪✮ where ♠❝♦♥s ♣ q ❂ ♣ > >= ✕① ✦ q > >= ✕② ✦ r❡t✉r♥ ✭① ✿ ②✮
SLIDE 10
s❡q✉❡♥❝❡
s❡q✉❡♥❝❡ ❡①❛♠♣❧❡
Monads> sequence [print 1, print 2, print ’a’] 1 2 ’a’ *Monads> it [(),(),()] *Monads> sequence_ [print 1, print 2, print ’a’] 1 2 ’a’ *Monads> it ()
SLIDE 11
s❡q✉❡♥❝❡
s❡q✉❡♥❝❡ ❡①❛♠♣❧❡ ✸
Prelude> sequence [Just 1, Just 2, Nothing, Just 3]
SLIDE 12
s❡q✉❡♥❝❡
s❡q✉❡♥❝❡ ❡①❛♠♣❧❡ ✸
Prelude> sequence [Just 1, Just 2, Nothing, Just 3] Nothing ▼❛②❜❡ ✐s ❛ss②♠♠❡tr✐❝❛❧ ✇✐t❤ r❡s♣❡❝t t♦ ♥♦t❤✐♥❣✦
SLIDE 13
♠❛♣▼
♠❛♣▼ ❞❡✜♥✐t✐♦♥
♠❛♣▼ ✿✿ ▼♦♥❛❞ ♠ ✮ ✭❛ ✦ ♠ ❜✮ ✦ ❬❛ ❪ ✦ ♠ ❬❜❪ ♠❛♣▼ ❢ ❛s ❂ s❡q✉❡♥❝❡ ✭♠❛♣ ❢ ❛s✮ ♠❛♣▼❴ ✿✿ ▼♦♥❛❞ ♠ ✮ ✭❛ ✦ ♠ ❜✮ ✦ ❬❛ ❪ ✦ ♠ ✭✮ ♠❛♣▼❴ ❢ ❛s ❂ s❡q✉❡♥❝❡❴ ✭♠❛♣ ❢ ❛s✮
SLIDE 14
♠❛♣▼
♠❛♣▼ ❡①❛♠♣❧❡ ✶
Monads> mapM_ print [1,2,3,4,5] 1 2 3 4 5
♠❛♣▼ ❡①❛♠♣❧❡ ✷
♣✉t❙tr✐♥❣ ✿✿ ❬❈❤❛r ❪ ✦ ■❖ ✭✮ ♣✉t❙tr✐♥❣ s ❂ ♠❛♣▼❴ ♣✉t❈❤❛r s
SLIDE 15
❢♦r▼
❢♦r▼ ❞❡✜♥✐t✐♦♥
❢♦r▼ ✿✿ ▼♦♥❛❞ ♠ ✮ ❬❛ ❪ ✦ ✭❛ ✦ ♠ ❜✮ ✦ ♠ ❬❜❪ ❢♦r▼ ❂ ✌✐♣ ♠❛♣▼ ❢♦r▼❴ ✿✿ ▼♦♥❛❞ ♠ ✮ ❬❛ ❪ ✦ ✭❛ ✦ ♠ ❜✮ ✦ ♠ ✭✮ ❢♦r▼❴ ❂ ✌✐♣ ♠❛♣▼❴
❢♦r▼❴ ❡①❛♠♣❧❡
♠❛✐♥ ❂ do ❢♦r▼❴ ❬✶ ✿ ✿ ✶✵❪ ✭✕✐ ✦ ♣r✐♥t ✐✮
SLIDE 16
☞❧t❡r▼
☞❧t❡r▼ ❞❡✜♥✐t✐♦♥
☞❧t❡r▼ ✿✿ ▼♦♥❛❞ ♠ ✮ ✭❛ ✦ ♠ ❇♦♦❧✮ ✦ ❬❛ ❪ ✦ ♠ ❬❛ ❪ ☞❧t❡r▼ ♣ ❬ ❪ ❂ r❡t✉r♥ ❬ ❪ ☞❧t❡r▼ ♣ ✭① ✿ ①s✮ ❂ do ❜ ✥ ♣ ① ②s ✥ ☞❧t❡r▼ ♣ ①s r❡t✉r♥ ✭if ❜ then ✭① ✿ ②s✮ else ②s✮
☞❧t❡r▼ ❡①❛♠♣❧❡
♠❛✐♥ ❂ do ♥❛♠❡s ✥ ❣❡t❆r❣s ❞✐rs ✥ ☞❧t❡r▼ ❞♦❡s❉✐r❡❝t♦r②❊①✐st ♥❛♠❡s ♠❛♣▼❴ ♣✉t❙tr▲♥ ❞✐rs
SLIDE 17
❢♦❧❞▼
❢♦❧❞▼ ❞❡✜♥✐t✐♦♥
❢♦❧❞❧ ✿✿ ✭❛ ✦ ❜ ✦ ❛✮ ✦ ❛ ✦ ❬❜❪ ✦ ❛ ❢♦❧❞❧ ❢ ③ ❬ ❪ ❂ ③ ❢♦❧❞❧ ❢ ③ ✭① ✿ ①s✮ ❂ ❢♦❧❞❧ ❢ ✭❢ ③ ①✮ ①s ❢♦❧❞▼ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜ ✦ ♠ ❛✮ ✦ ❛ ✦ ❬❜❪ ✦ ♠ ❛ ❢♦❧❞▼ ❢ ❛ ❬ ❪ ❂ r❡t✉r♥ ❛ ❢♦❧❞▼ ❢ ❛ ✭① ✿ ①s✮ ❂ ❢ ❛ ① > >= ✕② ✦ ❢♦❧❞▼ ❢ ② ①s ◆♦t❡ t❤❛t ✇❡ ❧✐❢t t❤❡ r❡s✉❧t ♦❢ ❛❧❧ ❢✉♥❝t✐♦♥s ✉♥❞❡r t❤❡ ♠♦♥❛❞✳
SLIDE 18
❢♦❧❞▼
❢♦❧❞▼ ❡①♣❧❛♥❛t✐♦♥
❢♦❧❞▼ ❢ ❛✶ ❬①✶❀ ①✷❀ ✿✿✿❀ ①♥ ❪ ❂ do ❛✷ ✥ ❢ ❛✶ ①✶ ❛✸ ✥ ❢ ❛✷ ①✷ ✿✿✿ ❢ ❛♥ ①♥
SLIDE 19
❢♦❧❞▼
❢♦❧❞▼ ❡①❛♠♣❧❡
Monads> foldM (\a b -> putStrLn (show a ++ "+" ++ show b ++ "=" ++ show (a+b)) » return (a+b)) 0 [1..5] 0+1=1 1+2=3 3+3=6 6+4=10 10+5=15 Monads> it 15
SLIDE 20
❢♦❧❞▼
❢♦❧❞▼ ❡①❛♠♣❧❡ ✷
data ❙❤❡❡♣ ❂ ❙❤❡❡♣❢♥❛♠❡ ✿✿ ❙tr✐♥❣❀ ♠♦t❤❡r ✿✿ ▼❛②❜❡ ❙❤❡❡♣❀ ❢❛t❤❡r ✿✿ ▼❛②❜❡ ❙❤❡❡♣❣ ❞♦❧❧② ✿✿ ❙❤❡❡♣ ❞♦❧❧② ❂ let ❛❞❛♠ ❂ ❙❤❡❡♣ "Adam" ◆♦t❤✐♥❣ ◆♦t❤✐♥❣ ❡✈❡ ❂ ❙❤❡❡♣ "Eve" ◆♦t❤✐♥❣ ◆♦t❤✐♥❣ ✉r❛♥✉s ❂ ❙❤❡❡♣ "Uranus" ◆♦t❤✐♥❣ ◆♦t❤✐♥❣ ❣❛❡❛ ❂ ❙❤❡❡♣ "Gaea" ◆♦t❤✐♥❣ ◆♦t❤✐♥❣ ❦r♦♥♦s ❂ ❙❤❡❡♣ "Kronos" ✭❏✉st ❣❛❡❛✮ ✭❏✉st ✉r❛♥✉s✮ ❤♦❧❧② ❂ ❙❤❡❡♣ "Holly" ✭❏✉st ❡✈❡✮ ✭❏✉st ❛❞❛♠✮ r♦❣❡r ❂ ❙❤❡❡♣ "Roger" ✭❏✉st ❡✈❡✮ ✭❏✉st ❦r♦♥♦s✮ ♠♦❧❧② ❂ ❙❤❡❡♣ "Molly" ✭❏✉st ❤♦❧❧②✮ ✭❏✉st r♦❣❡r✮ in ❙❤❡❡♣ "Dolly" ✭❏✉st ♠♦❧❧②✮ ◆♦t❤✐♥❣
SLIDE 21
❢♦❧❞▼
❢♦❧❞▼ ❡①❛♠♣❧❡ ✷
tr❛❝❡❋❛♠✐❧② ✿✿ ❬✭❙❤❡❡♣ ✦ ▼❛②❜❡ ❙❤❡❡♣✮❪ ✦ ❙❤❡❡♣ ✦ ▼❛②❜❡ ❙❤❡❡♣ tr❛❝❡❋❛♠✐❧② ❧ s ❂ ❢♦❧❞▼ ✭✌✐♣ ✭✩✮✮ s ❧ ♣❛t❡r♥❛❧●r❛♥❞♠♦t❤❡r ❂ tr❛❝❡❋❛♠✐❧② ❬❢❛t❤❡r❀ ♠♦t❤❡r ❪ ♠♦t❤❡rsP❛t❡r♥❛❧●r❛♥❞❢❛t❤❡r ❂ tr❛❝❡❋❛♠✐❧② ❬♠♦t❤❡r❀ ❢❛t❤❡r❀ ❢❛t❤❡r ❪ ❖✉t♣✉t✿ *Main> paternalGrandmother dolly Nothing *Main> mothersPaternalGrandfather dolly Just "Kronos"
SLIDE 22
❢♦❧❞▼
▼❛♣ ❞❡✜♥✐t✐♦♥
data ▼❛♣ ❦ ❛ ❡♠♣t② ✿✿ ▼❛♣ ❦ ❛ ✐♥s❡rt ✿✿ ❖r❞ ❦ ✮ ❦ ✦ ❛ ✦ ▼❛♣ ❦ ❛ ✦ ▼❛♣ ❦ ❛ ❧♦♦❦✉♣ ✿✿ ✭▼♦♥❛❞ ♠❀ ❖r❞ ❦✮ ✮ ❦ ✦ ▼❛♣ ❦ ❛ ✦ ♠ ❛ t♦▲✐st ✿✿ ▼❛♣ ❦ ❛ ✦ ❬✭❦❀ ❛✮❪
SLIDE 23
❢♦❧❞▼
❢♦❧❞▼ ❡①❛♠♣❧❡ ✸
data ❊♥tr② ❂ ❊♥tr②❢❦❡② ✿✿ ❙tr✐♥❣❀ ✈❛❧✉❡ ✿✿ ❙tr✐♥❣ ❣ type ❉✐❝t ❂ ▼❛♣ ❙tr✐♥❣ ❙tr✐♥❣ ❛❞❞❊♥tr② ✿✿ ❉✐❝t ✦ ❊♥tr② ✦ ❉✐❝t ❛❞❞❊♥tr② ❞ ❡ ❂ ✐♥s❡rt ✭❦❡② ❡✮ ✭✈❛❧✉❡ ❡✮ ❞ ❛❞❞❉❛t❛❋r♦♠❋✐❧❡ ✿✿ ❉✐❝t ✦ ❍❛♥❞❧❡ ✦ ■❖ ❉✐❝t ❛❞❞❉❛t❛❋r♦♠❋✐❧❡ ❞✐❝t ❤❞❧ ❂ do ❝♦♥t❡♥ts ✥ ❤●❡t❈♦♥t❡♥ts ❤❞❧ ❡♥tr✐❡s ✥ r❡t✉r♥ ✭♠❛♣ r❡❛❞ ✭❧✐♥❡s ❝♦♥t❡♥ts✮✮ r❡t✉r♥ ✭❢♦❧❞❧ ✭❛❞❞❊♥tr②✮ ❞✐❝t ❡♥tr✐❡s✮
SLIDE 24
❢♦❧❞▼
❢♦❧❞▼ ❡①❛♠♣❧❡ ✸
♠❛✐♥ ✿✿ ■❖ ✭✮ ♠❛✐♥ ❂ do ☞❧❡s ✥ ❣❡t❆r❣s ❤❛♥❞❧❡s ✥ ♠❛♣▼ ♦♣❡♥❋♦r❘❡❛❞✐♥❣ ☞❧❡s ❞✐❝t ✥ ❢♦❧❞▼ ❛❞❞❉❛t❛❋r♦♠❋✐❧❡ ❡♠♣t② ❤❛♥❞❧❡s ♣r✐♥t ✭t♦▲✐st ❞✐❝t✮
SLIDE 25
❥♦✐♥
❥♦✐♥ ❞❡✜♥✐t✐♦♥
❥♦✐♥ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ♠ ✭♠ ❛✮ ✦ ♠ ❛ ❥♦✐♥ ① ❂ ① > >= ✐❞ ◆♦t❡ t❤❛t ① > >= ❢ ❂ ✭❥♦✐♥ ✍ ❢♠❛♣ ❢ ✮ ①✳
❥♦✐♥ ❡①❛♠♣❧❡
Monads> join (Just (Just ’a’)) Just ’a’ Monads> join (return (putStrLn "hello")) hello Monads> return (putStrLn "hello") Monads> join [[1,2,3],[4,5]] [1,2,3,4,5]
SLIDE 26
❖✉t❧✐♥❡
✶
▲✐st ❢✉♥❝t✐♦♥s
✷
❈♦♥❞✐t✐♦♥❛❧s
✸
▲✐❢t✐♥❣
✹
▼♦♥❛❞P❧✉s ❢✉♥❝t✐♦♥s
SLIDE 27
✇❤❡♥
✇❤❡♥ ❛♥❞ ✉♥❧❡ss ❞❡✜♥✐t✐♦♥
✇❤❡♥ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ❇♦♦❧ ✦ ♠ ✭✮ ✦ ♠ ✭✮ ✇❤❡♥ ♣ s ❂ if ♣ then s else r❡t✉r♥ ✭✮ ✉♥❧❡ss ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ❇♦♦❧ ✦ ♠ ✭✮ ✦ ♠ ✭✮ ✉♥❧❡ss ♣ s ❂ ✇❤❡♥ ✭✿ ♣✮ s
✇❤❡♥ ❡①❛♠♣❧❡
Monads> mapM_ (\l -> when (not $ null l) (putStrLn l)) ["","abc","def","","","ghi"] abc def ghi
SLIDE 28
❖✉t❧✐♥❡
✶
▲✐st ❢✉♥❝t✐♦♥s
✷
❈♦♥❞✐t✐♦♥❛❧s
✸
▲✐❢t✐♥❣
✹
▼♦♥❛❞P❧✉s ❢✉♥❝t✐♦♥s
SLIDE 29
❧✐❢t▼
❧✐❢t▼ ❛♥❞ ❧✐❢t▼✷ ❞❡✜♥✐t✐♦♥
❧✐❢t▼ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜✮ ✦ ✭♠ ❛ ✦ ♠ ❜✮ ❧✐❢t▼ ❢ ❂ ✕❛ ✦ do ❢❛✵ ✥ ❛❀ r❡t✉r♥ ✭❢ ❛✵✮❣ ❧✐❢t▼✷ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜ ✦ ❝✮ ✦ ✭♠ ❛ ✦ ♠ ❜ ✦ ♠ ❝✮ ❧✐❢t▼✷ ❢ ❂ ✕❛ ❜ ✦ do ❢❛✵ ✥ ❛❀ ❜✵ ✥ ❜❀ r❡t✉r♥ ✭❢ ❛✵ ❜✵✮❣ ▲✐❢t✐♥❣ ❛❧❧♦✇s t♦ ❛♣♣❧② ♣✉r❡ ❢✉♥❝t✐♦♥s ♣♦✐♥t✲❢r❡❡ t♦ ♠♦♥❛❞✐❝ ✈❛❧✉❡s ❚♦❣❡t❤❡r ✇✐t❤ ♠♦♥❛❞✐❝ ❜✐♥❞ ✐t ❝♦♥st✐t✉t❡s ❛ ❢✉♥❝t✐♦♥❛❧ ❛♣♣r♦❛❝❤ ❛s ❛♣♣♦s❡❞ t♦ t❤❡ do✲♥♦t❛t✐♦♥
SLIDE 30
❧✐❢t▼
❧✐❢t▼ ❛♥❞ ❧✐❢t▼✷ ❞❡✜♥✐t✐♦♥
❧✐❢t▼ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜✮ ✦ ✭♠ ❛ ✦ ♠ ❜✮ ❧✐❢t▼ ❢ ❂ ✕❛ ✦ do ❢❛✵ ✥ ❛❀ r❡t✉r♥ ✭❢ ❛✵✮❣ ❧✐❢t▼✷ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜ ✦ ❝✮ ✦ ✭♠ ❛ ✦ ♠ ❜ ✦ ♠ ❝✮ ❧✐❢t▼✷ ❢ ❂ ✕❛ ❜ ✦ do ❢❛✵ ✥ ❛❀ ❜✵ ✥ ❜❀ r❡t✉r♥ ✭❢ ❛✵ ❜✵✮❣ ▲✐❢t✐♥❣ ❛❧❧♦✇s t♦ ❛♣♣❧② ♣✉r❡ ❢✉♥❝t✐♦♥s ♣♦✐♥t✲❢r❡❡ t♦ ♠♦♥❛❞✐❝ ✈❛❧✉❡s ❚♦❣❡t❤❡r ✇✐t❤ ♠♦♥❛❞✐❝ ❜✐♥❞ ✐t ❝♦♥st✐t✉t❡s ❛ ❢✉♥❝t✐♦♥❛❧ ❛♣♣r♦❛❝❤ ❛s ❛♣♣♦s❡❞ t♦ t❤❡ do✲♥♦t❛t✐♦♥
SLIDE 31
❧✐❢t▼
❧✐❢t▼ ❛♥❞ ❧✐❢t▼✷ ❞❡✜♥✐t✐♦♥
❧✐❢t▼ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜✮ ✦ ✭♠ ❛ ✦ ♠ ❜✮ ❧✐❢t▼ ❢ ❂ ✕❛ ✦ do ❢❛✵ ✥ ❛❀ r❡t✉r♥ ✭❢ ❛✵✮❣ ❧✐❢t▼✷ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ✭❛ ✦ ❜ ✦ ❝✮ ✦ ✭♠ ❛ ✦ ♠ ❜ ✦ ♠ ❝✮ ❧✐❢t▼✷ ❢ ❂ ✕❛ ❜ ✦ do ❢❛✵ ✥ ❛❀ ❜✵ ✥ ❜❀ r❡t✉r♥ ✭❢ ❛✵ ❜✵✮❣ ▲✐❢t✐♥❣ ❛❧❧♦✇s t♦ ❛♣♣❧② ♣✉r❡ ❢✉♥❝t✐♦♥s ♣♦✐♥t✲❢r❡❡ t♦ ♠♦♥❛❞✐❝ ✈❛❧✉❡s ❚♦❣❡t❤❡r ✇✐t❤ ♠♦♥❛❞✐❝ ❜✐♥❞ ✐t ❝♦♥st✐t✉t❡s ❛ ❢✉♥❝t✐♦♥❛❧ ❛♣♣r♦❛❝❤ ❛s ❛♣♣♦s❡❞ t♦ t❤❡ do✲♥♦t❛t✐♦♥
SLIDE 32
❧✐❢t▼
❧✐❢t▼ ❡①❛♠♣❧❡ ✶
❣❡t◆❛♠❡ ✿✿ ❙tr✐♥❣ ✦ ▼❛②❜❡ ❙tr✐♥❣ ❣❡t◆❛♠❡ ♥❛♠❡ ❂ do let ❞❜ ❂ ❬✭"John"❀ "Smith, John"✮❀ ✭"Mike"❀ "Caine, Michael"✮❪ t❡♠♣◆❛♠❡ ✥ ❧♦♦❦✉♣ ♥❛♠❡ ❞❜ r❡t✉r♥ ✭s✇❛♣◆❛♠❡s t❡♠♣◆❛♠❡✮ ❈❛♥ ❜❡ r❡✇r✐tt❡♥ ❛s✿ ❣❡t◆❛♠❡ ♥❛♠❡ ❂ do let ❞❜ ❂ ✿✿✿ ❧✐❢t▼ s✇❛♣◆❛♠❡s ✭❧♦♦❦✉♣ ♥❛♠❡ ❞❜✮
SLIDE 33
❧✐❢t▼
❧✐❢t▼ ❡①❛♠♣❧❡ ✷
❛❞❞❉❛t❛❋r♦♠❋✐❧❡ ✿✿ ❉✐❝t ✦ ❍❛♥❞❧❡ ✦ ■❖ ❉✐❝t ❛❞❞❉❛t❛❋r♦♠❋✐❧❡ ❞✐❝t ❤❞❧ ❂ do ❝♦♥t❡♥ts ✥ ❤●❡t❈♦♥t❡♥ts ❤❞❧ ❡♥tr✐❡s ✥ r❡t✉r♥ ✭♠❛♣ r❡❛❞ ✭❧✐♥❡s ❝♦♥t❡♥ts✮✮ r❡t✉r♥ ✭❢♦❧❞❧ ✭❛❞❞❊♥tr②✮ ❞✐❝t ❡♥tr✐❡s✮ ❈❛♥ ❜❡ r❡✇r✐tt❡♥ ❛s✿ ❛❞❞❉❛t❛❋r♦♠❋✐❧❡ ❞✐❝t ❂ ❧✐❢t▼ ✭❢♦❧❞❧ ❛❞❞❊♥tr② ❞✐❝t ✍ ♠❛♣ r❡❛❞ ✍ ❧✐♥❡s✮ ✍ ❤●❡t❈♦♥t❡♥ts
SLIDE 34
❧✐❢t▼
❧✐❢t▼✷ ❡①❛♠♣❧❡ ✶
❲❤❛t ❞♦❡s t❤✐s ❞♦❄ ❛❧❧❈♦♠❜✐♥❛t✐♦♥s ✿✿ ✭❛ ✦ ❛ ✦ ❛✮ ✦ ❬❬❛ ❪❪ ✦ ❬❛ ❪ ❛❧❧❈♦♠❜✐♥❛t✐♦♥s ❢♥ ❬ ❪ ❂ ❬ ❪ ❛❧❧❈♦♠❜✐♥❛t✐♦♥s ❢♥ ✭❧ ✿ ❧s✮ ❂ ❢♦❧❞❧ ✭❧✐❢t▼✷ ❢♥✮ ❧ ❧s
SLIDE 35
❧✐❢t▼
❧✐❢t▼✷ ❡①❛♠♣❧❡ ✶
❲❤❛t ❞♦❡s t❤✐s ❞♦❄ ❛❧❧❈♦♠❜✐♥❛t✐♦♥s ✿✿ ✭❛ ✦ ❛ ✦ ❛✮ ✦ ❬❬❛ ❪❪ ✦ ❬❛ ❪ ❛❧❧❈♦♠❜✐♥❛t✐♦♥s ❢♥ ❬ ❪ ❂ ❬ ❪ ❛❧❧❈♦♠❜✐♥❛t✐♦♥s ❢♥ ✭❧ ✿ ❧s✮ ❂ ❢♦❧❞❧ ✭❧✐❢t▼✷ ❢♥✮ ❧ ❧s
❖✉t♣✉t
Main> allCombinations (+) [[0,1],[1,2,3]] [0+1,0+2,0+3,1+1,1+2,1+3] = [1,2,3,2,3,4] Main> allCombinations (*) [[0,1],[1,2],[3,5]] [0+1,0+2,0+3,1+1,1+2,1+3] = [0,0,0,0,3,5,6,10]
SLIDE 36
❛♣
❛♣ ❞❡✜♥✐t✐♦♥
❛♣ ❤❡❧♣s ✇❤❡♥ ❜♦t❤ ❢✉♥❝t✐♦♥ ❛♥❞ ❛r❣✉♠❡♥t ❛r❡ ✐♥ t❤❡ ♠♦♥❛❞✳ ❛♣ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ♠ ✭❛ ✦ ❜✮ ✦ ♠ ❛ ✦ ♠ ❜ ❛♣ ❂ ❧✐❢t▼✷ ✭✩✮ ◆♦t❡ t❤❛t ❧✐❢t▼✷ ❢ ① ② ✐s ❡q✉✐✈❛❧❡♥t t♦ r❡t✉r♥ ❢ ❵❛♣❵ ① ❵❛♣❵ ②✳
❖✉t♣✉t
Main> [(*2),(+3)] ‘ap‘ [0,1,2] [0,2,4,3,4,5] Main> (Just (*2)) ‘ap‘ (Just 3) Just 6
SLIDE 37
❛♣
❛♣ ❡①❛♠♣❧❡
✇♦r❞s ✿✿ ❙tr✐♥❣ ✦ ❬❙tr✐♥❣ ❪ ❧♦♦❦✉♣ ✿✿ ✭❊q ❛✮ ✮ ❛ ✦ ❬✭❛❀ ❜✮❪ ✦ ▼❛②❜❡ ❜ ❛♣ ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ♠ ✭❛ ✦ ❜✮ ✦ ♠ ❛ ✦ ♠ ❜ ♠❛✐♥ ❂ do let ❢♥s ❂ ❬✭"double"❀ ✭✷✄✮✮❀ ✭"halve"❀ ✭❵❞✐✈❵✷✮✮❀ ✭"square"❀ ✭✕① ✦ ① ✄ ①✮✮❀ ✭"negate"❀ ♥❡❣❛t❡✮❀ ✭"incr"❀ ✭✰✶✮✮❀ ✭"decr"❀ ✭✰✭✶✮✮✮❪ ❛r❣s ✥ ❣❡t❆r❣s let ✈❛❧ ❂ r❡❛❞ ✭❛r❣s ✦✦ ✵✮ ❝♠❞s ❂ ♠❛♣ ✭✭✌✐♣ ❧♦♦❦✉♣✮ ❢♥s✮ ✭✇♦r❞s ✭❛r❣s ✦✦ ✶✮✮ ♣r✐♥t ✩ ❢♦❧❞❧ ✭✌✐♣ ❛♣✮ ✭❏✉st ✈❛❧✮ ❝♠❞s
SLIDE 38
❖✉t❧✐♥❡
✶
▲✐st ❢✉♥❝t✐♦♥s
✷
❈♦♥❞✐t✐♦♥❛❧s
✸
▲✐❢t✐♥❣
✹
▼♦♥❛❞P❧✉s ❢✉♥❝t✐♦♥s
SLIDE 39
♠s✉♠
♠s✉♠ ❞❡✜♥✐t✐♦♥
class ▼♦♥❛❞ ♠ ✮ ▼♦♥❛❞P❧✉s ♠ where ♠③❡r♦ ✿✿ ♠ ❛ ♠♣❧✉s ✿✿ ♠ ❛ ✦ ♠ ❛ ✦ ♠ ❛ ♠s✉♠ ✿✿ ▼♦♥❛❞P❧✉s ♠ ✮ ❬♠ ❛ ❪ ✦ ♠ ❛ ♠s✉♠ ①s ❂ ❢♦❧❞r ♠♣❧✉s ♠③❡r♦ ①s
SLIDE 40
♠s✉♠
♠s✉♠ ❡①❛♠♣❧❡
type ❱❛r✐❛❜❧❡ ❂ ❙tr✐♥❣ type ❱❛❧✉❡ ❂ ❙tr✐♥❣ type ❊♥✈✐r♦♥♠❡♥t❙t❛❝❦ ❂ ❬❬✭❱❛r✐❛❜❧❡❀ ❱❛❧✉❡✮❪❪ ❧♦♦❦✉♣❱❛r ✿✿ ❱❛r✐❛❜❧❡ ✦ ❊♥✈✐r♦♥♠❡♥t❙t❛❝❦ ✦ ▼❛②❜❡ ❱❛❧✉❡ ❧♦♦❦✉♣❱❛r ✈❛r st❛❝❦ ❂ ♠s✉♠ ✩ ♠❛♣ ✭❧♦♦❦✉♣ ✈❛r✮ st❛❝❦
SLIDE 41
❣✉❛r❞
❣✉❛r❞ ❞❡✜♥✐t✐♦♥
❣✉❛r❞ ✿✿ ▼♦♥❛❞P❧✉s ♠ ✮ ❇♦♦❧ ✦ ♠ ✭✮ ❣✉❛r❞ ♣ ❂ if ♣ then r❡t✉r♥ ✭✮ else ♠③❡r♦
❣✉❛r❞ ❡①❛♠♣❧❡
data ❘❡❝♦r❞ ❂ ❘❡❝❢♥❛♠❡ ✿✿ ❙tr✐♥❣❀ ❛❣❡ ✿✿ ■♥t ❣ type ❉❇ ❂ ❬❘❡❝♦r❞ ❪ ❣❡t❨♦✉♥❣❡r❚❤❛♥ ✿✿ ■♥t ✦ ❉❇ ✦ ❬❘❡❝♦r❞ ❪ ❣❡t❨♦✉♥❣❡r❚❤❛♥ ❧✐♠✐t ❞❜ ❂ ♠❛♣▼❛②❜❡ ✭✕r ✦ do ❢❣✉❛r❞ ✭❛❣❡ r ❁ ❧✐♠✐t✮❀ r❡t✉r♥ r ❣✮ ❞❜
SLIDE 42