From 266494c8834c2f9ac8d01125cb02d846815f7699 Mon Sep 17 00:00:00 2001 From: Maciej Jur Date: Sun, 4 Feb 2024 15:20:15 +0100 Subject: [PATCH] content: dead-simple-haskell --- .../slides/haskell-molecules/composition.png~ | Bin 91556 -> 0 bytes .../_DeadSimpleHaskell.lhs | 314 +++++++++++++++++- .../slides/dead-simple-haskell/index.md | 314 +++++++++++++++++- 3 files changed, 608 insertions(+), 20 deletions(-) delete mode 100644 public/static/content/slides/haskell-molecules/composition.png~ diff --git a/public/static/content/slides/haskell-molecules/composition.png~ b/public/static/content/slides/haskell-molecules/composition.png~ deleted file mode 100644 index 8ce1980c00110305bfd8dcefe2114b3586510f53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91556 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 diff --git a/src/content/slides/dead-simple-haskell/_DeadSimpleHaskell.lhs b/src/content/slides/dead-simple-haskell/_DeadSimpleHaskell.lhs index d7b838f..ae9a62c 100644 --- a/src/content/slides/dead-simple-haskell/_DeadSimpleHaskell.lhs +++ b/src/content/slides/dead-simple-haskell/_DeadSimpleHaskell.lhs @@ -848,23 +848,146 @@ Empty ----- ```haskell -kill :: Box Cat -> Box Cat +kill :: Cat -> Box Cat kill _ = Empty -save :: Box Cat -> Box Cat -save = id +save :: Cat -> Box Cat +save c = Has c ``` +(no animals were harmed in the making of this slideshow) + +--- + +```haskell ignore +kill :: Cat -> Box Cat +kill _ = Empty + +save :: Cat -> Box Cat +save c = Has c +``` + +![Kill](/static/content/slides/haskell-molecules/kill.png) + +--- + +![Kill](/static/content/slides/haskell-molecules/kill.png) + +```haskell ignore +λ> wrap kill `apply'` boxA +Has Empty +λ> wrap save `apply'` boxA +Has (Has (Cat "Meow")) +``` + +--- + ```haskell class Chainable box where chain :: box a -> (a -> box b) -> box b ``` +--- + +```haskell ignore +class Chainable box where + chain :: box a -> (a -> box b) -> box b +``` + +```haskell +instance Chainable Box where + chain Empty _ = Empty + chain (Has a) f = f a + +instance Chainable [] where + chain [] _ = [] + chain xs f = [x' | x <- xs, x' <- f x] +``` + +--- + +```haskell ignore +instance Chainable Box where + chain Empty _ = Empty + chain (Has a) f = f a + +instance Chainable [] where + chain [] _ = [] + chain xs f = [x' | x <- xs, x' <- f x] +``` + +![Save-kill](/static/content/slides/haskell-molecules/save-kill.png) + +--- + +![Save-kill](/static/content/slides/haskell-molecules/save-kill.png) + +```haskell ignore +λ> boxA `chain` save `chain` save `chain` save +Has (Cat "Meow") +λ> boxA `chain` save `chain` kill `chain` save +Empty +``` + +--- + +```haskell +kill' :: Cat -> [Cat] +kill' _ = [] + +save' :: Cat -> [Cat] +save' c = [c] + +clone :: Cat -> [Cat] +clone (Cat c) = [Cat $ c <> "L" , Cat $ c <> "R"] +``` + +--- + +```haskell ignore +kill' :: Cat -> [Cat] +kill' _ = [] + +save' :: Cat -> [Cat] +save' c = [c] + +clone :: Cat -> [Cat] +clone (Cat c) = [Cat $ c <> "L" , Cat $ c <> "R"] +``` + +```haskell ignore +λ> [catA] `chain` save' `chain` save' `chain` save' +[Cat "Meow"] +λ> [catA] `chain` save' `chain` clone `chain` save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] `chain` more' `chain` clone `chain` save' +[Cat "MeowLL",Cat "MeowLR",Cat "MeowRL",Cat "MeowRR"] +λ> [catA] `chain` clone `chain` clone `chain` kill' +[] +``` + +--- + +```haskell ignore +λ> [catA] `chain` save' `chain` save' `chain` save' +[Cat "Meow"] +λ> [catA] `chain` save' `chain` clone `chain` save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] `chain` more' `chain` clone `chain` save' +[Cat "MeowLL",Cat "MeowLR",Cat "MeowRL",Cat "MeowRR"] +λ> [catA] `chain` clone `chain` clone `chain` kill' +[] +``` + +![Chain list](/static/content/slides/haskell-molecules/chain-list.png) + +--- + +![Callbacks](/static/content/slides/haskell-molecules/callbacks.jpg) + ----- -In fact it all already exists. - -![This was all dream](/static/content/slides/haskell-molecules/_cave.jpg) +![This was all dream](/static/content/slides/haskell-molecules/cave.png) --- @@ -872,7 +995,69 @@ What's a `Mappable`? --- -![It's a Functor](/static/content/slides/haskell-molecules/scoobydoo.jpg) +It's a `Functor` + +![It's a Functor](/static/content/slides/haskell-molecules/its-functor.png) + +--- + +It's a `Functor` + +```haskell ignore +class Mappable box where + map' :: (a -> b) -> box a -> box b +``` + +```haskell ignore +class Functor f where + fmap :: (a -> b) -> f a -> f b + (<$) :: a -> f b -> f a +``` + +--- + +It's a `Functor` + +```haskell ignore +λ> map' (+1) [] +[] +λ> map' (+1) [1, 2, 3] +[2,3,4] +λ> map' (*3) [1, 2, 3] +[3,6,9] +``` + +```haskell ignore +λ> fmap (+1) [] +[] +λ> fmap (+1) [1, 2, 3] +[2,3,4] +λ> fmap (*3) [1, 2, 3] +[3,6,9] +λ> 1 <$ [1, 2, 3] +[1,1,1] +``` + +--- + +It's a `Functor` + +![Tardis](/static/content/slides/haskell-molecules/tardis.jpg) + +--- + +It's a `Functor` + +![Tardis inside](/static/content/slides/haskell-molecules/tardis-inside.jpg) + +--- + +```haskell ignore +main :: IO () +main = print "Hello World!" +``` + +![Tardis inside](/static/content/slides/haskell-molecules/io.png) --- @@ -880,7 +1065,73 @@ What's a `Appliable`? --- -![It's a Functor](/static/content/slides/haskell-molecules/scoobydoo.jpg) +It's an Applicative + +![It's an applicative](/static/content/slides/haskell-molecules/its-applicative.png) + +--- + +It's an Applicative + +```haskell ignore +class Appliable box where + wrap :: a -> box a + apply' :: box (a -> b) -> box a -> box b +``` + +```haskell ignore +class (Functor f) => Applicative f where + pure :: a -> f a + (<*>) :: f (a -> b) -> f a -> f b +``` + +--- + +It's an Applicative + +```haskell ignore +λ> wrap merge `apply'` [catA] `apply'` [] +[] +λ> wrap merge `apply'` [catA] `apply'` [catB] +[Dog "Meow & Nyaa"] +λ> wrap merge `apply'` [catA] `apply'` [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +```haskell ignore +λ> pure merge <*> [catA] <*> [] +[] +λ> pure merge <*> [catA] <*> [catB] +[Dog "Meow & Nyaa"] +λ> pure merge <*> [catA] <*> [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +--- + +```haskell ignore +λ> pure merge <*> [catA] <*> [] +[] +λ> pure merge <*> [catA] <*> [catB] +[Dog "Meow & Nyaa"] +λ> pure merge <*> [catA] <*> [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +```haskell ignore +λ> merge <$> [catA] <*> [] +[] +λ> merge <$> [catA] <*> [catB] +[Dog "Meow & Nyaa"] +λ> merge <$> [catA] <*> [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +```haskell ignore +merge :: Cat -> Cat -> Dog + +_ = merge catA catB +``` --- @@ -888,15 +1139,58 @@ What's a `Chainable`? --- -![It's a Functor](/static/content/slides/haskell-molecules/scoobydoo.jpg) +It's a monad + +![It's a monad](/static/content/slides/haskell-molecules/its-monad.png) --- -## Fun with monadic parsing +It's a monad +```haskell ignore +class Chainable box where + chain :: box a -> (a -> box b) -> box b +``` + +```haskell ignore +class Applicative m => Monad m where + (>>=) :: m a -> (a -> m b) -> m b + + (>>) :: m a -> m b -> m b + m >> k = m >>= \_ -> k + + return :: a -> m a + return = pure +``` --- +It's a monad + +```haskell ignore +λ> [catA] `chain` save' `chain` save' `chain` save' +[Cat "Meow"] +λ> [catA] `chain` save' `chain` clone `chain` save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] `chain` save' `chain` clone `chain` kill' +[] +``` + +```haskell ignore +λ> [catA] >>= save' >>= save' >>= save' +[Cat "Meow"] +λ> [catA] >>= save' >>= clone >>= save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] >>= save' >>= clone >>= kill' +[] +``` + +--- + +![Just one more typeclass bro](/static/content/slides/haskell-molecules/pepe.png) + +----- + ## More here: - **Learn You a Haskell for Great Good!** by Miran Lipovaca diff --git a/src/content/slides/dead-simple-haskell/index.md b/src/content/slides/dead-simple-haskell/index.md index d7b838f..ae9a62c 100644 --- a/src/content/slides/dead-simple-haskell/index.md +++ b/src/content/slides/dead-simple-haskell/index.md @@ -848,23 +848,146 @@ Empty ----- ```haskell -kill :: Box Cat -> Box Cat +kill :: Cat -> Box Cat kill _ = Empty -save :: Box Cat -> Box Cat -save = id +save :: Cat -> Box Cat +save c = Has c ``` +(no animals were harmed in the making of this slideshow) + +--- + +```haskell ignore +kill :: Cat -> Box Cat +kill _ = Empty + +save :: Cat -> Box Cat +save c = Has c +``` + +![Kill](/static/content/slides/haskell-molecules/kill.png) + +--- + +![Kill](/static/content/slides/haskell-molecules/kill.png) + +```haskell ignore +λ> wrap kill `apply'` boxA +Has Empty +λ> wrap save `apply'` boxA +Has (Has (Cat "Meow")) +``` + +--- + ```haskell class Chainable box where chain :: box a -> (a -> box b) -> box b ``` +--- + +```haskell ignore +class Chainable box where + chain :: box a -> (a -> box b) -> box b +``` + +```haskell +instance Chainable Box where + chain Empty _ = Empty + chain (Has a) f = f a + +instance Chainable [] where + chain [] _ = [] + chain xs f = [x' | x <- xs, x' <- f x] +``` + +--- + +```haskell ignore +instance Chainable Box where + chain Empty _ = Empty + chain (Has a) f = f a + +instance Chainable [] where + chain [] _ = [] + chain xs f = [x' | x <- xs, x' <- f x] +``` + +![Save-kill](/static/content/slides/haskell-molecules/save-kill.png) + +--- + +![Save-kill](/static/content/slides/haskell-molecules/save-kill.png) + +```haskell ignore +λ> boxA `chain` save `chain` save `chain` save +Has (Cat "Meow") +λ> boxA `chain` save `chain` kill `chain` save +Empty +``` + +--- + +```haskell +kill' :: Cat -> [Cat] +kill' _ = [] + +save' :: Cat -> [Cat] +save' c = [c] + +clone :: Cat -> [Cat] +clone (Cat c) = [Cat $ c <> "L" , Cat $ c <> "R"] +``` + +--- + +```haskell ignore +kill' :: Cat -> [Cat] +kill' _ = [] + +save' :: Cat -> [Cat] +save' c = [c] + +clone :: Cat -> [Cat] +clone (Cat c) = [Cat $ c <> "L" , Cat $ c <> "R"] +``` + +```haskell ignore +λ> [catA] `chain` save' `chain` save' `chain` save' +[Cat "Meow"] +λ> [catA] `chain` save' `chain` clone `chain` save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] `chain` more' `chain` clone `chain` save' +[Cat "MeowLL",Cat "MeowLR",Cat "MeowRL",Cat "MeowRR"] +λ> [catA] `chain` clone `chain` clone `chain` kill' +[] +``` + +--- + +```haskell ignore +λ> [catA] `chain` save' `chain` save' `chain` save' +[Cat "Meow"] +λ> [catA] `chain` save' `chain` clone `chain` save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] `chain` more' `chain` clone `chain` save' +[Cat "MeowLL",Cat "MeowLR",Cat "MeowRL",Cat "MeowRR"] +λ> [catA] `chain` clone `chain` clone `chain` kill' +[] +``` + +![Chain list](/static/content/slides/haskell-molecules/chain-list.png) + +--- + +![Callbacks](/static/content/slides/haskell-molecules/callbacks.jpg) + ----- -In fact it all already exists. - -![This was all dream](/static/content/slides/haskell-molecules/_cave.jpg) +![This was all dream](/static/content/slides/haskell-molecules/cave.png) --- @@ -872,7 +995,69 @@ What's a `Mappable`? --- -![It's a Functor](/static/content/slides/haskell-molecules/scoobydoo.jpg) +It's a `Functor` + +![It's a Functor](/static/content/slides/haskell-molecules/its-functor.png) + +--- + +It's a `Functor` + +```haskell ignore +class Mappable box where + map' :: (a -> b) -> box a -> box b +``` + +```haskell ignore +class Functor f where + fmap :: (a -> b) -> f a -> f b + (<$) :: a -> f b -> f a +``` + +--- + +It's a `Functor` + +```haskell ignore +λ> map' (+1) [] +[] +λ> map' (+1) [1, 2, 3] +[2,3,4] +λ> map' (*3) [1, 2, 3] +[3,6,9] +``` + +```haskell ignore +λ> fmap (+1) [] +[] +λ> fmap (+1) [1, 2, 3] +[2,3,4] +λ> fmap (*3) [1, 2, 3] +[3,6,9] +λ> 1 <$ [1, 2, 3] +[1,1,1] +``` + +--- + +It's a `Functor` + +![Tardis](/static/content/slides/haskell-molecules/tardis.jpg) + +--- + +It's a `Functor` + +![Tardis inside](/static/content/slides/haskell-molecules/tardis-inside.jpg) + +--- + +```haskell ignore +main :: IO () +main = print "Hello World!" +``` + +![Tardis inside](/static/content/slides/haskell-molecules/io.png) --- @@ -880,7 +1065,73 @@ What's a `Appliable`? --- -![It's a Functor](/static/content/slides/haskell-molecules/scoobydoo.jpg) +It's an Applicative + +![It's an applicative](/static/content/slides/haskell-molecules/its-applicative.png) + +--- + +It's an Applicative + +```haskell ignore +class Appliable box where + wrap :: a -> box a + apply' :: box (a -> b) -> box a -> box b +``` + +```haskell ignore +class (Functor f) => Applicative f where + pure :: a -> f a + (<*>) :: f (a -> b) -> f a -> f b +``` + +--- + +It's an Applicative + +```haskell ignore +λ> wrap merge `apply'` [catA] `apply'` [] +[] +λ> wrap merge `apply'` [catA] `apply'` [catB] +[Dog "Meow & Nyaa"] +λ> wrap merge `apply'` [catA] `apply'` [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +```haskell ignore +λ> pure merge <*> [catA] <*> [] +[] +λ> pure merge <*> [catA] <*> [catB] +[Dog "Meow & Nyaa"] +λ> pure merge <*> [catA] <*> [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +--- + +```haskell ignore +λ> pure merge <*> [catA] <*> [] +[] +λ> pure merge <*> [catA] <*> [catB] +[Dog "Meow & Nyaa"] +λ> pure merge <*> [catA] <*> [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +```haskell ignore +λ> merge <$> [catA] <*> [] +[] +λ> merge <$> [catA] <*> [catB] +[Dog "Meow & Nyaa"] +λ> merge <$> [catA] <*> [catB, Cat "C"] +[Dog "Meow & Nyaa",Dog "Meow & C"] +``` + +```haskell ignore +merge :: Cat -> Cat -> Dog + +_ = merge catA catB +``` --- @@ -888,15 +1139,58 @@ What's a `Chainable`? --- -![It's a Functor](/static/content/slides/haskell-molecules/scoobydoo.jpg) +It's a monad + +![It's a monad](/static/content/slides/haskell-molecules/its-monad.png) --- -## Fun with monadic parsing +It's a monad +```haskell ignore +class Chainable box where + chain :: box a -> (a -> box b) -> box b +``` + +```haskell ignore +class Applicative m => Monad m where + (>>=) :: m a -> (a -> m b) -> m b + + (>>) :: m a -> m b -> m b + m >> k = m >>= \_ -> k + + return :: a -> m a + return = pure +``` --- +It's a monad + +```haskell ignore +λ> [catA] `chain` save' `chain` save' `chain` save' +[Cat "Meow"] +λ> [catA] `chain` save' `chain` clone `chain` save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] `chain` save' `chain` clone `chain` kill' +[] +``` + +```haskell ignore +λ> [catA] >>= save' >>= save' >>= save' +[Cat "Meow"] +λ> [catA] >>= save' >>= clone >>= save' +[Cat "MeowL",Cat "MeowR"] +λ> [catA] >>= save' >>= clone >>= kill' +[] +``` + +--- + +![Just one more typeclass bro](/static/content/slides/haskell-molecules/pepe.png) + +----- + ## More here: - **Learn You a Haskell for Great Good!** by Miran Lipovaca