t Prr tt - - PowerPoint PPT Presentation

t pr r
SMART_READER_LITE
LIVE PREVIEW

t Prr tt - - PowerPoint PPT Presentation

t Prr tt rsrrs rtt


slide-1
SLIDE 1

❋✉♥❝t✐♦♥❛❧ Pr♦❣r❛♠♠✐♥❣

❈♦♥t✐♥✉❛t✐♦♥ ▼♦♥❛❞ ❛♥❞ ▼♦♥❛❞ ❚r❛♥s❢♦r♠❡rs ❏❡✈❣❡♥✐ ❑❛❜❛♥♦✈

❉❡♣❛rt♠❡♥t ♦❢ ❈♦♠♣✉t❡r ❙❝✐❡♥❝❡ ❯♥✐✈❡rs✐t② ♦❢ ❚❛rt✉

slide-2
SLIDE 2

■♥tr♦❞✉❝t✐♦♥

Pr❡✈✐♦✉s❧② ♦♥ ❋✉♥❝t✐♦♥❛❧ Pr♦❣r❛♠♠✐♥❣

▼♦♥❛❞✐❝ ❧❛✇s ▼♦♥❛❞ ❝❧❛ss ✭> >= ❛♥❞ r❡t✉r♥✮ ▼♦♥❛❞P❧✉s ❝❧❛ss ✭♠③❡r♦ ❛♥❞ ♠♣❧✉s✮ do✲♥♦t❛t✐♦♥ ▼❛②❜❡✱ ▲✐st ❛♥❞ ❙t❛t❡ ♠♦♥❛❞s ■❖ ♠♦♥❛❞ ▼♦♥❛❞✐❝ Pr❡❧✉❞❡

slide-3
SLIDE 3

■♥tr♦❞✉❝t✐♦♥

Pr❡✈✐♦✉s❧② ♦♥ ❋✉♥❝t✐♦♥❛❧ Pr♦❣r❛♠♠✐♥❣

▼♦♥❛❞✐❝ ❧❛✇s ▼♦♥❛❞ ❝❧❛ss ✭> >= ❛♥❞ r❡t✉r♥✮ ▼♦♥❛❞P❧✉s ❝❧❛ss ✭♠③❡r♦ ❛♥❞ ♠♣❧✉s✮ do✲♥♦t❛t✐♦♥ ▼❛②❜❡✱ ▲✐st ❛♥❞ ❙t❛t❡ ♠♦♥❛❞s ■❖ ♠♦♥❛❞ ▼♦♥❛❞✐❝ Pr❡❧✉❞❡

slide-4
SLIDE 4

❖✈❡r✈✐❡✇

❈♦♥t ♠♦♥❛❞

▼♦♥❛❞✐❝ ❚r❛♥s❢♦r♠❡rs

slide-5
SLIDE 5

❖✉t❧✐♥❡

❈♦♥t ♠♦♥❛❞

▼♦♥❛❞✐❝ ❚r❛♥s❢♦r♠❡rs

slide-6
SLIDE 6

❈♦♥t✐♥✉❛t✐♦♥s

sq✉❛r❡ ❡①❛♠♣❧❡ ✶

◆♦ ❝♦♥t✐♥✉❛t✐♦♥s✿ sq✉❛r❡ ✿✿ ■♥t ✦ ■♥t sq✉❛r❡ ① ❂ ① ✧ ✷ ♠❛✐♥ ❂ do let ① ❂ sq✉❛r❡ ✹ ♣r✐♥t ①

slide-7
SLIDE 7

❈♦♥t✐♥✉❛t✐♦♥s

sq✉❛r❡ ❡①❛♠♣❧❡ ✷

❈♦♥t✐♥✉❛t✐♦♥✲♣❛ss✐♥❣ st②❧❡✿ sq✉❛r❡ ✿✿ ■♥t ✦ ✭■♥t ✦ ❛✮ ✦ ❛ sq✉❛r❡ ① ❦ ❂ ❦ ✭① ✧ ✷✮ ♠❛✐♥ ❂ sq✉❛r❡ ✹ ♣r✐♥t

slide-8
SLIDE 8

❈♦♥t

❈♦♥t ❞❡✜♥✐t✐♦♥

newtype ❈♦♥t r ❛ ❂ ❈♦♥t❢r✉♥❈♦♥t ✿✿ ✭❛ ✦ r✮ ✦ r ❣

sq✉❛r❡ ❡①❛♠♣❧❡ ✸

❈♦♥t✐♥✉❛t✐♦♥ ❤✐❞❞❡♥ ❜❡❤✐♥❞ ❛ ♠♦♥❛❞✿ sq✉❛r❡ ✿✿ ■♥t ✦ ❈♦♥t r ■♥t sq✉❛r❡ ① ❂ r❡t✉r♥ ✭① ✧ ✷✮ ♠❛✐♥ ❂ r✉♥❈♦♥t ✭sq✉❛r❡ ✹✮ ♣r✐♥t

slide-9
SLIDE 9

❈♦♥t

❈♦♥t ❞❡✜♥✐t✐♦♥

newtype ❈♦♥t r ❛ ❂ ❈♦♥t❢r✉♥❈♦♥t ✿✿ ✭❛ ✦ r✮ ✦ r ❣ instance ▼♦♥❛❞ ✭❈♦♥t r✮ where r❡t✉r♥ ❛ ❂ ✕❦ ✦ ❦ ❛ ♠ > >= ❢ ❂ ✕❦ ✦ ♠ ✭✕❛ ✦ ❢ ❛ ❦✮

slide-10
SLIDE 10

❈♦♥t

❈♦♥t ❞❡✜♥✐t✐♦♥

newtype ❈♦♥t r ❛ ❂ ❈♦♥t❢r✉♥❈♦♥t ✿✿ ✭❛ ✦ r✮ ✦ r ❣ instance ▼♦♥❛❞ ✭❈♦♥t r✮ where r❡t✉r♥ ❛ ❂ ❈♦♥t ✩ ✕❦ ✦ ❦ ❛ ✭❈♦♥t ❝✮ > >= ❢ ❂ ❈♦♥t ✩ ✕❦ ✦ ❝ ✭✕❛ ✦ r✉♥❈♦♥t ✭❢ ❛✮ ❦✮ ❙✐♥❝❡ ❈♦♥t ✐s ❛ newtype✦

slide-11
SLIDE 11

❈♦♥t

sq✉❛r❡ ❡①❛♠♣❧❡ ✹

❲❤❛t ✐s t❤❡ r❡s✉❧t❄ sq✉❛r❡ ✿✿ ■♥t ✦ ❈♦♥t r ■♥t sq✉❛r❡ ① ❂ r❡t✉r♥ ✭① ✧ ✷✮ ❛❞❞❚❤r❡❡ ✿✿ ■♥t ✦ ❈♦♥t r ■♥t ❛❞❞❚❤r❡❡ ① ❂ r❡t✉r♥ ✭① ✰ ✸✮ ♠❛✐♥ ❂ r✉♥❈♦♥t ✭sq✉❛r❡ ✹ > >= ❛❞❞❚❤r❡❡✮ ♣r✐♥t

slide-12
SLIDE 12

❈♦♥t

sq✉❛r❡ ❡①❛♠♣❧❡ ✹

❲❤❛t ✐s t❤❡ r❡s✉❧t❄ sq✉❛r❡ ✿✿ ■♥t ✦ ❈♦♥t r ■♥t sq✉❛r❡ ① ❂ r❡t✉r♥ ✭① ✧ ✷✮ ❛❞❞❚❤r❡❡ ✿✿ ■♥t ✦ ❈♦♥t r ■♥t ❛❞❞❚❤r❡❡ ① ❂ r❡t✉r♥ ✭① ✰ ✸✮ ♠❛✐♥ ❂ r✉♥❈♦♥t ✭sq✉❛r❡ ✹ > >= ❛❞❞❚❤r❡❡✮ ♣r✐♥t

❖✉t♣✉t

Main> main 19

slide-13
SLIDE 13

❝❛❧❧❈❈

❝❛❧❧❈❈ ❞❡✜♥✐t✐♦♥

❝❛❧❧❈❈ ❝❛♣t✉r❡s t❤❡ ❝✉rr❡♥t ❝♦♥t✐♥✉❛t✐♦♥ ❛♥❞ ♣❛ss❡s ✐t ❛s ❛♥ ❛r❣✉♠❡♥t✳ ❝❛❧❧❈❈ ✿✿ ✭✭❛ ✦ ❈♦♥t r ❜✮ ✦ ❈♦♥t r ❛✮ ✦ ❈♦♥t r ❛

slide-14
SLIDE 14

❝❛❧❧❈❈

❝❛❧❧❈❈ ❡①❛♠♣❧❡ ✶

❦ ✐s t❤❡ ❝✉rr❡♥t ❝♦♥t✐♥✉❛t✐♦♥✱ ❝❛❧❧✐♥❣ ❦ ❝❛✉s❡s ✐♠♠❡❞✐❛t❡ r❡t✉r♥✳ ❝❛❧❧❈❈ ✿✿ ✭✭❛ ✦ ❈♦♥t r ❜✮ ✦ ❈♦♥t r ❛✮ ✦ ❈♦♥t r ❛ ❜❛r ✿✿ ❈♦♥t r ■♥t ❜❛r ❂ ❝❛❧❧❈❈ ✩ ✕❦ ✦ do let ♥ ❂ ✺ ❦ ♥ r❡t✉r♥ ✷✺ ♠❛✐♥ ❂ r✉♥❈♦♥t ❜❛r ♣r✐♥t ❆❧✇❛②s ♣r✐♥ts ✺✳

slide-15
SLIDE 15

❝❛❧❧❈❈

❝❛❧❧❈❈ ❡①❛♠♣❧❡ ✷

❢♦♦ ✿✿ ■♥t ✦ ❈♦♥t r ❙tr✐♥❣ ❢♦♦ ♥ ❂ ❝❛❧❧❈❈ ✩ ✕❦ ✦ do let ♥✵ ❂ ♥ ✧ ✷ ✰ ✸ ✇❤❡♥ ✭♥✵ ❃ ✷✵✮ ✩ ❦ "over twenty" r❡t✉r♥ ✭s❤♦✇ ✩ ♥✵ ✹✮

❖✉t♣✉t

Main> runCont (foo 5) print

  • ver twenty

Main> runCont (foo 4) print 15

slide-16
SLIDE 16

❝❛❧❧❈❈

❝❛❧❧❈❈ ❡①❛♠♣❧❡ ✸

❊①❝❡♣t✐♦♥s ❛r❡ s✐♠♣❧❡r t❤❛♥ ❝♦♥t✐♥✉❛t✐♦♥s✿ ❞✐✈❊①❝♣t ① ② ❤❛♥❞❧❡r ❂ ❝❛❧❧❈❈ ✩ ✕♦❦ ✦ do ❡rr ✥ ❝❛❧❧❈❈ ✩ ✕♥♦t❖❦ ✦ do ✇❤❡♥ ✭② ✑ ✵✮ ✩ ♥♦t❖❦ "Denominator 0" ♦❦ ✩ ① ❵❞✐✈❵ ② ❤❛♥❞❧❡r ❡rr

❖✉t♣✉t

Main> runCont (divExcpt 10 2 error) id 5 Main>runCont (divExcpt 10 0 error) id *** Exception: Denominator 0

slide-17
SLIDE 17

❝❛❧❧❈❈

❝❛❧❧❈❈ ❡①❛♠♣❧❡ ✹

fun :: Int -> String fun n = (‘runCont‘ id) $ do str <- callCC $ \exit1 -> do when (n < 10) (exit1 (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 3) (exit2 (length ns)) when ((length ns) < 5) (exit2 n) when ((length ns) < 7) $ do let ns’ = map intToDigit (reverse ns) exit1 (dropWhile (==’0’) ns’) return $ sum ns return $ "(ns = " ++ (show ns) ++ ") " ++ (show n’) return $ "Answer: " ++ str

slide-18
SLIDE 18

❝❛❧❧❈❈

❝❛❧❧❈❈ ❡①❛♠♣❧❡ ✹

■♥♣✉t ✭♥✮ ❖✉t♣✉t ▲✐st ❙❤♦✇♥ ✵✲✾ ♥ ♥♦♥❡ ✶✵✲✶✾✾ ♥✉♠❜❡r ♦❢ ❞✐❣✐ts ✐♥ ✭♥✴✷✮ ❞✐❣✐ts ♦❢ ✭♥✴✷✮ ✷✵✵✲✶✾✾✾✾ ♥ ❞✐❣✐ts ♦❢ ✭♥✴✷✮ ✷✵✵✵✵✲✶✾✾✾✾✾✾ ✭♥✴✷✮ ❜❛❝❦✇❛r❞s ♥♦♥❡ ❃❂ ✷✵✵✵✵✵✵ s✉♠ ♦❢ ❞✐❣✐ts ♦❢ ✭♥✴✷✮ ❞✐❣✐ts ♦❢ ✭♥✴✷✮

slide-19
SLIDE 19

❝❛❧❧❈❈

❝❛❧❧❈❈ ❞❡✜♥✐t✐♦♥ ✷

class ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞❈♦♥t ♠ where ❝❛❧❧❈❈ ✿✿ ✭✭❛ ✦ ♠ ❜✮ ✦ ♠ ❛✮ ✦ ♠ ❛ instance ▼♦♥❛❞❈♦♥t ✭❈♦♥t r✮ where ❝❛❧❧❈❈ ❢ ❂ ❈♦♥t ✩ ✕❦ ✦ r✉♥❈♦♥t ✭❢ ✭✕❛ ✦ ❈♦♥t ✩ ✕ ✦ ❦ ❛✮✮ ❦

slide-20
SLIDE 20

❖✉t❧✐♥❡

❈♦♥t ♠♦♥❛❞

▼♦♥❛❞✐❝ ❚r❛♥s❢♦r♠❡rs

slide-21
SLIDE 21

▼♦♥❛❞✐❝ ❚r❛♥s❢♦r♠❡rs

❖✉t❧✐♥❡

❲❡ ✇✐❧❧ ❜❡❣✐♥ ❜② s✐♠♣❧✐❢②✐♥❣ t❤❡ ♣r❡✈✐♦✉s ❡①❛♠♣❧❡ ❚❤❡♥ ✇❡ ✇✐❧❧ tr② t♦ ❡♥❤❛♥❝❡ ✐t ❜② ❛❞❞✐♥❣ s♦♠❡ ■❖ ❋✐♥❛❧❧② ✇❡ ✇✐❧❧ ❣❡♥❡r❛❧✐③❡ t❤❡ ❛♣♣r♦❛❝❤ t♦ ❛r❜✐tr❛r② ♠♦♥❛❞s

slide-22
SLIDE 22

▼♦♥❛❞✐❝ ❚r❛♥s❢♦r♠❡rs

❖✉t❧✐♥❡

❲❡ ✇✐❧❧ ❜❡❣✐♥ ❜② s✐♠♣❧✐❢②✐♥❣ t❤❡ ♣r❡✈✐♦✉s ❡①❛♠♣❧❡ ❚❤❡♥ ✇❡ ✇✐❧❧ tr② t♦ ❡♥❤❛♥❝❡ ✐t ❜② ❛❞❞✐♥❣ s♦♠❡ ■❖ ❋✐♥❛❧❧② ✇❡ ✇✐❧❧ ❣❡♥❡r❛❧✐③❡ t❤❡ ❛♣♣r♦❛❝❤ t♦ ❛r❜✐tr❛r② ♠♦♥❛❞s

slide-23
SLIDE 23

▼♦♥❛❞✐❝ ❚r❛♥s❢♦r♠❡rs

❖✉t❧✐♥❡

❲❡ ✇✐❧❧ ❜❡❣✐♥ ❜② s✐♠♣❧✐❢②✐♥❣ t❤❡ ♣r❡✈✐♦✉s ❡①❛♠♣❧❡ ❚❤❡♥ ✇❡ ✇✐❧❧ tr② t♦ ❡♥❤❛♥❝❡ ✐t ❜② ❛❞❞✐♥❣ s♦♠❡ ■❖ ❋✐♥❛❧❧② ✇❡ ✇✐❧❧ ❣❡♥❡r❛❧✐③❡ t❤❡ ❛♣♣r♦❛❝❤ t♦ ❛r❜✐tr❛r② ♠♦♥❛❞s

slide-24
SLIDE 24

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✶

fun :: Int -> String fun n = (‘runCont‘ id) $ do str <- callCC $ \exit1 -> do when (n < 10) (exit1 (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 5) (exit2 n) return $ sum ns return $ "(ns = " ++ (show ns) ++ ") " ++ (show n’) return $ "Answer: " ++ str

slide-25
SLIDE 25

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✶

■♥♣✉t ✭♥✮ ❖✉t♣✉t ▲✐st ❙❤♦✇♥ ✵✲✾ ♥ ♥♦♥❡ ✶✵✲✶✾✾ ♥✉♠❜❡r ♦❢ ❞✐❣✐ts ✐♥ ✭♥✴✷✮ ❞✐❣✐ts ♦❢ ✭♥✴✷✮ ✶✵✲✶✾✾✾✾ ♥ ❞✐❣✐ts ♦❢ ✭♥✴✷✮ ✷✵✵✵✵✲✶✾✾✾✾✾✾ ✭♥✴✷✮ ❜❛❝❦✇❛r❞s ♥♦♥❡ ❃❂ ✷✵✵✵✵ s✉♠ ♦❢ ❞✐❣✐ts ♦❢ ✭♥✴✷✮ ❞✐❣✐ts ♦❢ ✭♥✴✷✮

slide-26
SLIDE 26

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✷

❚❤❡ ❡❛s✐❡st ✇❛② t♦ ❛❞❞ ■❖ ✐s t♦ ♥❡st ❈♦♥t ✐♥s✐❞❡ ■❖✿ fun :: IO String fun = do n <- (readLn::IO Int) return $ (‘runCont‘ id) $ do str <- callCC $ \exit1 -> do when (n < 10) (exit1 (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 5) (exit2 n) return $ sum ns return $ "(ns = " ++ (show ns) ++ ") " ++ (show n’) return $ "Answer: " ++ str

slide-27
SLIDE 27

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖

❲❤❛t ❞♦ ✇❡ ❞♦ ✇❤❡♥ ✇❡ ♥❡❡❞ t♦ ✉s❡ ■❖ ✐♥s✐❞❡ ❈♦♥t ♠♦♥❛❞❄ ❲❡ ❝♦✉❧❞ tr② t♦ ❥✉st ❧✐❢t t❤❡ ❝♦♥t✐♥✉❛t✐♦♥ r❡s✉❧t ✈❛❧✉❡ ✐♥t♦ ■❖

t♦■❖ ❞❡✜♥✐t✐♦♥

t♦■❖ ✿✿ ❛ ✦ ■❖ ❛ t♦■❖ ① ❂ r❡t✉r♥ ①

slide-28
SLIDE 28

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖

❲❤❛t ❞♦ ✇❡ ❞♦ ✇❤❡♥ ✇❡ ♥❡❡❞ t♦ ✉s❡ ■❖ ✐♥s✐❞❡ ❈♦♥t ♠♦♥❛❞❄ ❲❡ ❝♦✉❧❞ tr② t♦ ❥✉st ❧✐❢t t❤❡ ❝♦♥t✐♥✉❛t✐♦♥ r❡s✉❧t ✈❛❧✉❡ ✐♥t♦ ■❖

t♦■❖ ❞❡✜♥✐t✐♦♥

t♦■❖ ✿✿ ❛ ✦ ■❖ ❛ t♦■❖ ① ❂ r❡t✉r♥ ①

slide-29
SLIDE 29

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖

❲❤❛t ❞♦ ✇❡ ❞♦ ✇❤❡♥ ✇❡ ♥❡❡❞ t♦ ✉s❡ ■❖ ✐♥s✐❞❡ ❈♦♥t ♠♦♥❛❞❄ ❲❡ ❝♦✉❧❞ tr② t♦ ❥✉st ❧✐❢t t❤❡ ❝♦♥t✐♥✉❛t✐♦♥ r❡s✉❧t ✈❛❧✉❡ ✐♥t♦ ■❖

t♦■❖ ❞❡✜♥✐t✐♦♥

t♦■❖ ✿✿ ❛ ✦ ■❖ ❛ t♦■❖ ① ❂ r❡t✉r♥ ①

slide-30
SLIDE 30

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✶

fun :: Int -> String fun n = (‘runCont‘ id) $ do str <- callCC $ \exit1 -> do when (n < 10) (exit1 (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 5) (exit2 n) return $ sum ns return $ "(ns = " ++ (show ns) ++ ") " ++ (show n’) return $ "Answer: " ++ str

slide-31
SLIDE 31

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✹

fun :: Int -> IO String fun n = (‘runCont‘ id) $ do str <- callCC $ \exit1 -> do when (n < 10) (exit1 $ toIO (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 5) (exit2 $ do putStrLn "Enter a number:" x <- (readLn::IO Int) return x) return (toIO (sum ns)) return $ do num <- n’ return $ "(ns = " ++ (show ns) ++ ") " ++ (show num) return $ do s <- str return $ "Answer: " ++ s

slide-32
SLIDE 32

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖ ✷

❚❤✐s ❛❞❞s ✉s❡❧❡ss ❝♦♥✈❡rs✐♦♥s t♦✴❢r♦♠ ■❖ ❲❡ ✇♦✉❧❞ ■❖ ♦♥❧② ✇❤❡r❡ ❛❝t✉❛❧❧② ♥❡❡❞❡❞ ❚❤✐s ✐s ✇❤❡r❡ ♠♦♥❛❞✐❝ tr❛♥s❢♦r♠❡rs ❝♦♠❡ ✐♥

❧✐❢t■❖ ❞❡✜♥✐t✐♦♥

❧✐❢t■❖ ❛❧❧♦✇s t♦ r✉♥ ■❖ ❝♦❞❡ ✐♥s✐❞❡ ❛ ♠♦♥❛❞✳ class ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞■❖ ♠ where ❧✐❢t■❖ ✿✿ ■❖ ❛ ✦ ♠ ❛

slide-33
SLIDE 33

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖ ✷

❚❤✐s ❛❞❞s ✉s❡❧❡ss ❝♦♥✈❡rs✐♦♥s t♦✴❢r♦♠ ■❖ ❲❡ ✇♦✉❧❞ ■❖ ♦♥❧② ✇❤❡r❡ ❛❝t✉❛❧❧② ♥❡❡❞❡❞ ❚❤✐s ✐s ✇❤❡r❡ ♠♦♥❛❞✐❝ tr❛♥s❢♦r♠❡rs ❝♦♠❡ ✐♥

❧✐❢t■❖ ❞❡✜♥✐t✐♦♥

❧✐❢t■❖ ❛❧❧♦✇s t♦ r✉♥ ■❖ ❝♦❞❡ ✐♥s✐❞❡ ❛ ♠♦♥❛❞✳ class ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞■❖ ♠ where ❧✐❢t■❖ ✿✿ ■❖ ❛ ✦ ♠ ❛

slide-34
SLIDE 34

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖ ✷

❚❤✐s ❛❞❞s ✉s❡❧❡ss ❝♦♥✈❡rs✐♦♥s t♦✴❢r♦♠ ■❖ ❲❡ ✇♦✉❧❞ ■❖ ♦♥❧② ✇❤❡r❡ ❛❝t✉❛❧❧② ♥❡❡❞❡❞ ❚❤✐s ✐s ✇❤❡r❡ ♠♦♥❛❞✐❝ tr❛♥s❢♦r♠❡rs ❝♦♠❡ ✐♥

❧✐❢t■❖ ❞❡✜♥✐t✐♦♥

❧✐❢t■❖ ❛❧❧♦✇s t♦ r✉♥ ■❖ ❝♦❞❡ ✐♥s✐❞❡ ❛ ♠♦♥❛❞✳ class ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞■❖ ♠ where ❧✐❢t■❖ ✿✿ ■❖ ❛ ✦ ♠ ❛

slide-35
SLIDE 35

■❖ ✰ ❈♦♥t

❆❞❞✐♥❣ ■❖ ✷

❚❤✐s ❛❞❞s ✉s❡❧❡ss ❝♦♥✈❡rs✐♦♥s t♦✴❢r♦♠ ■❖ ❲❡ ✇♦✉❧❞ ■❖ ♦♥❧② ✇❤❡r❡ ❛❝t✉❛❧❧② ♥❡❡❞❡❞ ❚❤✐s ✐s ✇❤❡r❡ ♠♦♥❛❞✐❝ tr❛♥s❢♦r♠❡rs ❝♦♠❡ ✐♥

❧✐❢t■❖ ❞❡✜♥✐t✐♦♥

❧✐❢t■❖ ❛❧❧♦✇s t♦ r✉♥ ■❖ ❝♦❞❡ ✐♥s✐❞❡ ❛ ♠♦♥❛❞✳ class ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞■❖ ♠ where ❧✐❢t■❖ ✿✿ ■❖ ❛ ✦ ♠ ❛

slide-36
SLIDE 36

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✷

fun :: IO String fun = do n <- (readLn::IO Int) return $ (‘runCont‘ id) $ do str <- callCC $ \exit1 -> do when (n < 10) (exit1 (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 5) (exit2 n) return $ sum ns return $ "(ns = " ++ (show ns) ++ ") " ++ (show n’) return $ "Answer: " ++ str

slide-37
SLIDE 37

■❖ ✰ ❈♦♥t

❊①❛♠♣❧❡ ✺

fun :: IO String fun = (‘runContT‘ return) $ do n <- liftIO (readLn::IO Int) str <- callCC $ \exit1 -> do when (n < 10) (exit1 (show n)) let ns = map digitToInt (show (n ‘div‘ 2)) n’ <- callCC $ \exit2 -> do when ((length ns) < 5) $ do liftIO $ putStrLn "Enter a number:" x <- liftIO (readLn::IO Int) exit2 x return $ sum ns return $ "(ns = " ++ (show ns) ++ ") " ++ (show n’) return $ "Answer: " ++ str

slide-38
SLIDE 38

❚r❛♥s❢♦r♠❡rs

▼♦♥❛❞❚r❛♥s

class ▼♦♥❛❞❚r❛♥s t where ❧✐❢t ✿✿ ✭▼♦♥❛❞ ♠✮ ✮ ♠ ❛ ✦ t ♠ ❛ class ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞■❖ ♠ where ❧✐❢t■❖ ✿✿ ■❖ ❛ ✦ ♠ ❛

■♥st❛♥❝❡s

▼♦♥❛❞ ❚r❛♥s❢♦r♠❡r ❖r✐❣✐♥❛❧ ❈♦♠❜✐♥❡❞ ❊rr♦r ❊rr♦r❚ ❊✐t❤❡r ❡ ❛ ♠ ✭❊✐t❤❡r ❡ ❛✮ ❙t❛t❡ ❙t❛t❡❚ s ✦ ✭❛❀ s✮ s ✦ ♠ ✭❛❀ s✮ ❘❡❛❞❡r ❘❡❛❞❡r❚ r ✦ ❛ r ✦ ♠ ❛ ❬ ❪ ▲✐st❚ ❬❛ ❪ ♠ ❬❛ ❪ ❈♦♥t ❈♦♥t❚ ✭❛ ✦ r✮ ✦ r ✭❛ ✦ ♠ r✮ ✦ ♠ r

slide-39
SLIDE 39

❚r❛♥s❢♦r♠❡rs

❙t❛t❡❚ ❞❡✜♥✐t✐♦♥

newtype ❙t❛t❡❚ s ♠ ❛ ❂ ❙t❛t❡❚❢r✉♥❙t❛t❡❚ ✿✿ ✭s ✦ ♠ ✭❛❀ s✮✮❣ instance ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞ ✭❙t❛t❡❚ s ♠✮ where r❡t✉r♥ ❛ ❂ ❙t❛t❡❚ ✩ ✕s ✦ r❡t✉r♥ ✭❛❀ s✮ ✭❙t❛t❡❚ ①✮ > >= ❢ ❂ ❙t❛t❡❚ ✩ ✕s ✦ do ✭✈❀ s✵✮ ✥ ① s ✭❙t❛t❡❚ ① ✵✮ ✥ r❡t✉r♥ ✩ ❢ ✈ ① ✵ s✵ instance ✭▼♦♥❛❞ ♠✮ ✮ ▼♦♥❛❞❙t❛t❡ s ✭❙t❛t❡❚ s ♠✮ where ❣❡t ❂ ❙t❛t❡❚ ✩ ✕s ✦ r❡t✉r♥ ✭s❀ s✮ ♣✉t s ❂ ❙t❛t❡❚ ✩ ✕ ✦ r❡t✉r♥ ✭✭✮❀ s✮ instance ▼♦♥❛❞❚r❛♥s ✭❙t❛t❡❚ s✮ where ❧✐❢t ❝ ❂ ❙t❛t❡❚ ✩ ✕s ✦ ❝ > >= ✭✕① ✦ r❡t✉r♥ ✭①❀ s✮✮

slide-40
SLIDE 40

❚r❛♥s❢♦r♠❡rs

■♥t❡r♠✐ss✐♦♥

❚r❛♥s❢♦r♠❡rs ✇r❛♣ ♠♦♥❛❞s t♦ ❝r❡❛t❡ ❝♦♠❜✐♥❡❞ ♠♦♥❛❞s ❚r❛♥s❢♦r♠❡r ❝♦♠❜✐♥❡❞ ✇✐t❤ ■❞❡♥t✐t② ♠♦♥❛❞ ✐s s❛♠❡ ❛s ♦r✐❣✐♥❛❧✳ ❊✳❣✳ ❙t❛t❡❚ s ■❞❡♥t✐t② ✐s s❛♠❡ ❛s ❙t❛t❡ s ❖r❞❡r ✐s ✐♠♣♦rt❛♥t✳ ❙t❛t❡❚ s ✭❊✐t❤❡r ❡✮ ✇✐t❤ t②♣❡ s ✦ ❊✐t❤❡r ❡ ✭❛❀ s✮ ✐s ❞✐✛❡r❡♥t ❢r♦♠ ❊rr♦r❚ ❡ ✭❙t❛t❡ s✮ ✇✐t❤ t②♣❡ s ✦ ✭❊✐t❤❡r ❡ ❛❀ s✮ ❚r❛♥s❢♦r♠❡r ❜✐♥❞ ✐s ❝♦♠❜✐♥❡❞✱ s♦ ❛❧❧ ♠♦♥❛❞s ❡♥❞ ✉♣ ❜♦✉♥❞✳ ❊✳❣✳ ❙t❛t❡❚ s ❬ ❪ ✇✐t❤ t②♣❡ s ✦ ❬✭❛❀ s✮❪ ✇✐❧❧ ❜✐♥❞ ❜♦t❤ st❛t❡ ❛♥❞ ❧✐st✱ ♣r♦❞✉❝✐♥❣ ❛ ❧✐st ♦❢ ❜♦t❤ ✈❛❧✉❡s ❛♥❞ st❛t❡ ♦♥ ❡✈❡r② ❜✐♥❞✳ ❲❡ st✐❧❧ ♥❡❡❞ t♦ r✉♥ ✐♥♥❡r ♠♦♥❛❞s✳ ❈♦♥t❚ r ■❖ ❛ ✇✐❧❧ ♣r♦❞✉❝❡ ✭❛ ✦ ■❖ r✮ ✦ ■❖ r✱ s♦ ✇❡ ♥❡❡❞ t♦ r✉♥❈♦♥t❚ ✜rst ❛♥❞ ❜✐♥❞ ■❖ ❧❛t❡r ❧✐❢t■❖ ✐s ❥✉st ❧✐❢t s♣❡❝✐❛❧✐③❡❞ ❢♦r ■❖ ♠♦♥❛❞

slide-41
SLIDE 41

❚r❛♥s❢♦r♠❡rs

■♥t❡r♠✐ss✐♦♥

❚r❛♥s❢♦r♠❡rs ✇r❛♣ ♠♦♥❛❞s t♦ ❝r❡❛t❡ ❝♦♠❜✐♥❡❞ ♠♦♥❛❞s ❚r❛♥s❢♦r♠❡r ❝♦♠❜✐♥❡❞ ✇✐t❤ ■❞❡♥t✐t② ♠♦♥❛❞ ✐s s❛♠❡ ❛s ♦r✐❣✐♥❛❧✳ ❊✳❣✳ ❙t❛t❡❚ s ■❞❡♥t✐t② ✐s s❛♠❡ ❛s ❙t❛t❡ s ❖r❞❡r ✐s ✐♠♣♦rt❛♥t✳ ❙t❛t❡❚ s ✭❊✐t❤❡r ❡✮ ✇✐t❤ t②♣❡ s ✦ ❊✐t❤❡r ❡ ✭❛❀ s✮ ✐s ❞✐✛❡r❡♥t ❢r♦♠ ❊rr♦r❚ ❡ ✭❙t❛t❡ s✮ ✇✐t❤ t②♣❡ s ✦ ✭❊✐t❤❡r ❡ ❛❀ s✮ ❚r❛♥s❢♦r♠❡r ❜✐♥❞ ✐s ❝♦♠❜✐♥❡❞✱ s♦ ❛❧❧ ♠♦♥❛❞s ❡♥❞ ✉♣ ❜♦✉♥❞✳ ❊✳❣✳ ❙t❛t❡❚ s ❬ ❪ ✇✐t❤ t②♣❡ s ✦ ❬✭❛❀ s✮❪ ✇✐❧❧ ❜✐♥❞ ❜♦t❤ st❛t❡ ❛♥❞ ❧✐st✱ ♣r♦❞✉❝✐♥❣ ❛ ❧✐st ♦❢ ❜♦t❤ ✈❛❧✉❡s ❛♥❞ st❛t❡ ♦♥ ❡✈❡r② ❜✐♥❞✳ ❲❡ st✐❧❧ ♥❡❡❞ t♦ r✉♥ ✐♥♥❡r ♠♦♥❛❞s✳ ❈♦♥t❚ r ■❖ ❛ ✇✐❧❧ ♣r♦❞✉❝❡ ✭❛ ✦ ■❖ r✮ ✦ ■❖ r✱ s♦ ✇❡ ♥❡❡❞ t♦ r✉♥❈♦♥t❚ ✜rst ❛♥❞ ❜✐♥❞ ■❖ ❧❛t❡r ❧✐❢t■❖ ✐s ❥✉st ❧✐❢t s♣❡❝✐❛❧✐③❡❞ ❢♦r ■❖ ♠♦♥❛❞

slide-42
SLIDE 42

❚r❛♥s❢♦r♠❡rs

■♥t❡r♠✐ss✐♦♥

❚r❛♥s❢♦r♠❡rs ✇r❛♣ ♠♦♥❛❞s t♦ ❝r❡❛t❡ ❝♦♠❜✐♥❡❞ ♠♦♥❛❞s ❚r❛♥s❢♦r♠❡r ❝♦♠❜✐♥❡❞ ✇✐t❤ ■❞❡♥t✐t② ♠♦♥❛❞ ✐s s❛♠❡ ❛s ♦r✐❣✐♥❛❧✳ ❊✳❣✳ ❙t❛t❡❚ s ■❞❡♥t✐t② ✐s s❛♠❡ ❛s ❙t❛t❡ s ❖r❞❡r ✐s ✐♠♣♦rt❛♥t✳ ❙t❛t❡❚ s ✭❊✐t❤❡r ❡✮ ✇✐t❤ t②♣❡ s ✦ ❊✐t❤❡r ❡ ✭❛❀ s✮ ✐s ❞✐✛❡r❡♥t ❢r♦♠ ❊rr♦r❚ ❡ ✭❙t❛t❡ s✮ ✇✐t❤ t②♣❡ s ✦ ✭❊✐t❤❡r ❡ ❛❀ s✮ ❚r❛♥s❢♦r♠❡r ❜✐♥❞ ✐s ❝♦♠❜✐♥❡❞✱ s♦ ❛❧❧ ♠♦♥❛❞s ❡♥❞ ✉♣ ❜♦✉♥❞✳ ❊✳❣✳ ❙t❛t❡❚ s ❬ ❪ ✇✐t❤ t②♣❡ s ✦ ❬✭❛❀ s✮❪ ✇✐❧❧ ❜✐♥❞ ❜♦t❤ st❛t❡ ❛♥❞ ❧✐st✱ ♣r♦❞✉❝✐♥❣ ❛ ❧✐st ♦❢ ❜♦t❤ ✈❛❧✉❡s ❛♥❞ st❛t❡ ♦♥ ❡✈❡r② ❜✐♥❞✳ ❲❡ st✐❧❧ ♥❡❡❞ t♦ r✉♥ ✐♥♥❡r ♠♦♥❛❞s✳ ❈♦♥t❚ r ■❖ ❛ ✇✐❧❧ ♣r♦❞✉❝❡ ✭❛ ✦ ■❖ r✮ ✦ ■❖ r✱ s♦ ✇❡ ♥❡❡❞ t♦ r✉♥❈♦♥t❚ ✜rst ❛♥❞ ❜✐♥❞ ■❖ ❧❛t❡r ❧✐❢t■❖ ✐s ❥✉st ❧✐❢t s♣❡❝✐❛❧✐③❡❞ ❢♦r ■❖ ♠♦♥❛❞

slide-43
SLIDE 43

❚r❛♥s❢♦r♠❡rs

■♥t❡r♠✐ss✐♦♥

❚r❛♥s❢♦r♠❡rs ✇r❛♣ ♠♦♥❛❞s t♦ ❝r❡❛t❡ ❝♦♠❜✐♥❡❞ ♠♦♥❛❞s ❚r❛♥s❢♦r♠❡r ❝♦♠❜✐♥❡❞ ✇✐t❤ ■❞❡♥t✐t② ♠♦♥❛❞ ✐s s❛♠❡ ❛s ♦r✐❣✐♥❛❧✳ ❊✳❣✳ ❙t❛t❡❚ s ■❞❡♥t✐t② ✐s s❛♠❡ ❛s ❙t❛t❡ s ❖r❞❡r ✐s ✐♠♣♦rt❛♥t✳ ❙t❛t❡❚ s ✭❊✐t❤❡r ❡✮ ✇✐t❤ t②♣❡ s ✦ ❊✐t❤❡r ❡ ✭❛❀ s✮ ✐s ❞✐✛❡r❡♥t ❢r♦♠ ❊rr♦r❚ ❡ ✭❙t❛t❡ s✮ ✇✐t❤ t②♣❡ s ✦ ✭❊✐t❤❡r ❡ ❛❀ s✮ ❚r❛♥s❢♦r♠❡r ❜✐♥❞ ✐s ❝♦♠❜✐♥❡❞✱ s♦ ❛❧❧ ♠♦♥❛❞s ❡♥❞ ✉♣ ❜♦✉♥❞✳ ❊✳❣✳ ❙t❛t❡❚ s ❬ ❪ ✇✐t❤ t②♣❡ s ✦ ❬✭❛❀ s✮❪ ✇✐❧❧ ❜✐♥❞ ❜♦t❤ st❛t❡ ❛♥❞ ❧✐st✱ ♣r♦❞✉❝✐♥❣ ❛ ❧✐st ♦❢ ❜♦t❤ ✈❛❧✉❡s ❛♥❞ st❛t❡ ♦♥ ❡✈❡r② ❜✐♥❞✳ ❲❡ st✐❧❧ ♥❡❡❞ t♦ r✉♥ ✐♥♥❡r ♠♦♥❛❞s✳ ❈♦♥t❚ r ■❖ ❛ ✇✐❧❧ ♣r♦❞✉❝❡ ✭❛ ✦ ■❖ r✮ ✦ ■❖ r✱ s♦ ✇❡ ♥❡❡❞ t♦ r✉♥❈♦♥t❚ ✜rst ❛♥❞ ❜✐♥❞ ■❖ ❧❛t❡r ❧✐❢t■❖ ✐s ❥✉st ❧✐❢t s♣❡❝✐❛❧✐③❡❞ ❢♦r ■❖ ♠♦♥❛❞

slide-44
SLIDE 44

❚r❛♥s❢♦r♠❡rs

■♥t❡r♠✐ss✐♦♥

❚r❛♥s❢♦r♠❡rs ✇r❛♣ ♠♦♥❛❞s t♦ ❝r❡❛t❡ ❝♦♠❜✐♥❡❞ ♠♦♥❛❞s ❚r❛♥s❢♦r♠❡r ❝♦♠❜✐♥❡❞ ✇✐t❤ ■❞❡♥t✐t② ♠♦♥❛❞ ✐s s❛♠❡ ❛s ♦r✐❣✐♥❛❧✳ ❊✳❣✳ ❙t❛t❡❚ s ■❞❡♥t✐t② ✐s s❛♠❡ ❛s ❙t❛t❡ s ❖r❞❡r ✐s ✐♠♣♦rt❛♥t✳ ❙t❛t❡❚ s ✭❊✐t❤❡r ❡✮ ✇✐t❤ t②♣❡ s ✦ ❊✐t❤❡r ❡ ✭❛❀ s✮ ✐s ❞✐✛❡r❡♥t ❢r♦♠ ❊rr♦r❚ ❡ ✭❙t❛t❡ s✮ ✇✐t❤ t②♣❡ s ✦ ✭❊✐t❤❡r ❡ ❛❀ s✮ ❚r❛♥s❢♦r♠❡r ❜✐♥❞ ✐s ❝♦♠❜✐♥❡❞✱ s♦ ❛❧❧ ♠♦♥❛❞s ❡♥❞ ✉♣ ❜♦✉♥❞✳ ❊✳❣✳ ❙t❛t❡❚ s ❬ ❪ ✇✐t❤ t②♣❡ s ✦ ❬✭❛❀ s✮❪ ✇✐❧❧ ❜✐♥❞ ❜♦t❤ st❛t❡ ❛♥❞ ❧✐st✱ ♣r♦❞✉❝✐♥❣ ❛ ❧✐st ♦❢ ❜♦t❤ ✈❛❧✉❡s ❛♥❞ st❛t❡ ♦♥ ❡✈❡r② ❜✐♥❞✳ ❲❡ st✐❧❧ ♥❡❡❞ t♦ r✉♥ ✐♥♥❡r ♠♦♥❛❞s✳ ❈♦♥t❚ r ■❖ ❛ ✇✐❧❧ ♣r♦❞✉❝❡ ✭❛ ✦ ■❖ r✮ ✦ ■❖ r✱ s♦ ✇❡ ♥❡❡❞ t♦ r✉♥❈♦♥t❚ ✜rst ❛♥❞ ❜✐♥❞ ■❖ ❧❛t❡r ❧✐❢t■❖ ✐s ❥✉st ❧✐❢t s♣❡❝✐❛❧✐③❡❞ ❢♦r ■❖ ♠♦♥❛❞

slide-45
SLIDE 45

❚r❛♥s❢♦r♠❡rs

■♥t❡r♠✐ss✐♦♥

❚r❛♥s❢♦r♠❡rs ✇r❛♣ ♠♦♥❛❞s t♦ ❝r❡❛t❡ ❝♦♠❜✐♥❡❞ ♠♦♥❛❞s ❚r❛♥s❢♦r♠❡r ❝♦♠❜✐♥❡❞ ✇✐t❤ ■❞❡♥t✐t② ♠♦♥❛❞ ✐s s❛♠❡ ❛s ♦r✐❣✐♥❛❧✳ ❊✳❣✳ ❙t❛t❡❚ s ■❞❡♥t✐t② ✐s s❛♠❡ ❛s ❙t❛t❡ s ❖r❞❡r ✐s ✐♠♣♦rt❛♥t✳ ❙t❛t❡❚ s ✭❊✐t❤❡r ❡✮ ✇✐t❤ t②♣❡ s ✦ ❊✐t❤❡r ❡ ✭❛❀ s✮ ✐s ❞✐✛❡r❡♥t ❢r♦♠ ❊rr♦r❚ ❡ ✭❙t❛t❡ s✮ ✇✐t❤ t②♣❡ s ✦ ✭❊✐t❤❡r ❡ ❛❀ s✮ ❚r❛♥s❢♦r♠❡r ❜✐♥❞ ✐s ❝♦♠❜✐♥❡❞✱ s♦ ❛❧❧ ♠♦♥❛❞s ❡♥❞ ✉♣ ❜♦✉♥❞✳ ❊✳❣✳ ❙t❛t❡❚ s ❬ ❪ ✇✐t❤ t②♣❡ s ✦ ❬✭❛❀ s✮❪ ✇✐❧❧ ❜✐♥❞ ❜♦t❤ st❛t❡ ❛♥❞ ❧✐st✱ ♣r♦❞✉❝✐♥❣ ❛ ❧✐st ♦❢ ❜♦t❤ ✈❛❧✉❡s ❛♥❞ st❛t❡ ♦♥ ❡✈❡r② ❜✐♥❞✳ ❲❡ st✐❧❧ ♥❡❡❞ t♦ r✉♥ ✐♥♥❡r ♠♦♥❛❞s✳ ❈♦♥t❚ r ■❖ ❛ ✇✐❧❧ ♣r♦❞✉❝❡ ✭❛ ✦ ■❖ r✮ ✦ ■❖ r✱ s♦ ✇❡ ♥❡❡❞ t♦ r✉♥❈♦♥t❚ ✜rst ❛♥❞ ❜✐♥❞ ■❖ ❧❛t❡r ❧✐❢t■❖ ✐s ❥✉st ❧✐❢t s♣❡❝✐❛❧✐③❡❞ ❢♦r ■❖ ♠♦♥❛❞

slide-46
SLIDE 46

❚r❛♥s❢♦r♠❡rs

❊①❛♠♣❧❡ ✻

❚❤❡ ❑❛❧♦t❛♥s ❛r❡ ❛ tr✐❜❡ ✇✐t❤ ❛ ♣❡❝✉❧✐❛r q✉✐r❦✿ t❤❡✐r ♠❛❧❡s ❛❧✇❛②s t❡❧❧ t❤❡ tr✉t❤✳ ❚❤❡✐r ❢❡♠❛❧❡s ♥❡✈❡r ♠❛❦❡ t✇♦ ❝♦♥s❡❝✉t✐✈❡ tr✉❡ st❛t❡♠❡♥ts✱ ♦r t✇♦ ❝♦♥s❡❝✉t✐✈❡ ✉♥tr✉❡ st❛t❡♠❡♥ts✳ ❆♥ ❛♥t❤r♦♣♦❧♦❣✐st ✭❧❡t✬s ❝❛❧❧ ❤✐♠ ❲♦r❢✮ ❤❛s ❜❡❣✉♥ t♦ st✉❞② t❤❡♠✳ ❲♦r❢ ❞♦❡s ♥♦t ②❡t ❦♥♦✇ t❤❡ ❑❛❧♦t❛♥ ❧❛♥❣✉❛❣❡✳ ❖♥❡ ❞❛②✱ ❤❡ ♠❡❡ts ❛ ❑❛❧♦t❛♥ ✭❤❡t❡r♦s❡①✉❛❧✮ ❝♦✉♣❧❡ ❛♥❞ t❤❡✐r ❝❤✐❧❞ ❑✐❜✐✳ ❲♦r❢ ❛s❦s ❑✐❜✐✿ ✏❆r❡ ②♦✉ ❛ ❜♦②❄✑ ❚❤❡ ❦✐❞ ❛♥s✇❡rs ✐♥ ❑❛❧♦t❛♥✱ ✇❤✐❝❤ ♦❢ ❝♦✉rs❡ ❲♦r❢ ❞♦❡s♥✬t ✉♥❞❡rst❛♥❞✳ ❲♦r❢ t✉r♥s t♦ t❤❡ ♣❛r❡♥ts ✭✇❤♦ ❦♥♦✇ ❊♥❣❧✐s❤✮ ❢♦r ❡①♣❧❛♥❛t✐♦♥✳ ❖♥❡ ♦❢ t❤❡♠ s❛②s✿ ✧❑✐❜✐ s❛✐❞✿ ❵■ ❛♠ ❛ ❜♦②✳✬✧ ❚❤❡ ♦t❤❡r ❛❞❞s✿ ✧❑✐❜✐ ✐s ❛ ❣✐r❧✳ ❑✐❜✐ ❧✐❡❞✳✧ ❙♦❧✈❡ ❢♦r t❤❡ s❡① ♦❢ ❑✐❜✐ ❛♥❞ t❤❡ s❡① ♦❢ ❡❛❝❤ ♣❛r❡♥t✳