Slide 1

Slide 1 text

FP functional programming

Slide 2

Slide 2 text

K. k47.cz @kaja47 Karel Čížek funkcionalne.cz

Slide 3

Slide 3 text

K. k47.cz @kaja47 Karel Čížek funkcionalne.cz

Slide 4

Slide 4 text

┌─────┬─────────┬─────────┬─────────┬───────┬─┬───┬───────────────────────┐ ├─┬─╴ ├─────┐ ╷ │ ╶─┐ ┌─┐ │ ╶───┬─╴ │ ╶───┐ ╵ │ ╷ │ ╷ ╶───┐ ┌───────┬───╴ │ │ │ ┌─┘ ╶─┐ │ ├─┴─╴ │ │ ╵ │ ┌─╴ │ ┌─┴─┬─╴ ├───┘ │ │ └─┬─┐ ├─┘ ┌───┐ │ ╶─┬─┤ │ │ │ ┌─╴ │ │ ╵ ╶─┬─┘ │ ╶─┴─┘ ┌─┘ ╵ ╷ ╵ ┌─┘ ┌───┤ └─┐ │ │ │ ╶─┤ ╶─┤ └─┐ ╵ │ │ │ └─┘ ┌─┤ └───┬─┘ ┌─┴───────┤ ┌─┬─┴───┤ ┌─┴─┐ │ ╷ │ │ │ └─┐ ├─╴ ├─╴ ├─╴ │ │ └─────┤ └───╴ │ ┌─┘ ╷ ╶─┬─╴ │ │ │ ┌─┐ ╵ │ ╷ ╵ │ └─┤ │ │ ╷ │ │ ╶─┤ ╶─┴─┐ │ │ ╶─┬─╴ │ ┌───┬─┘ │ ┌─┴─┐ └─┐ │ │ │ ╵ └───┘ ├───┴─┐ │ ╵ │ └─┘ └─╴ ├───┐ │ │ ├─╴ │ ┌─┘ │ ╷ ╵ ╷ │ │ ╷ └─┐ │ │ ╵ ├───────┐ │ ┌─┐ │ └─╴ ├───┬───┐ │ ╷ │ └─┤ ├───┘ │ ┌─┴─┼───┘ │ ╵ │ ┌─┘ │ │ ┌─┘ ┌─┐ ╶─┘ │ │ │ └─┐ ╶─┘ ┌─┘ ╷ └─┘ │ └─┐ │ │ ╶─┐ │ ╵ ╷ │ ╶───┴─┬─┘ │ ╶─┴─┘ │ ┌─┘M└─┬───┤ │ └─┐ │ ┌───┘ ┌─┴─────┼─┐ │ │ │ ╷ └─┴─┬─┘ │ ╶───┐ └───┼─────┐ │ ├─╴ ┌─┘ ╷ │ │ ╷ ╵ ├─┘ ┌───┘ ┌───╴ ╵ │ │ │ │ ├─┬─╴ │ ╶─┴───┬─┴─┐ ╷ │ ┌─┐ └─┤ ╵ ╷ │ ┌─┘ ╵ ├─┴─┐ ╵ ┌─┴───╴ │ ┌─────┤ │ │ │ ╵ │ ╶─┴─────┐ ╵ ╷ │ │ │ │ └─┐ └───┤ │ └─┬───┘ ╷ ├───┴─╴ ┌───┼─┘ ┌─┐ │ │ │ ├─┐ ├───┬─╴ ╷ └───┤ ├─┘ │ └─╴ │ ╷ ┌─┘ └─┐ │ ╶─┬─┘ │ ╷ ╶───┘ ╷ │ ╶─┤ │ │ ╵ │ │ ╵ │ ╷ │ ╶─┴───┐ │ │ ╷ └─┬─╴ │ └─┘ ┌───┤ └─╴ │ ┌─┴─┴───┐ ┌─┤ └─┐ ╵ │ └─╴ │ ├───┘ │ └─────╴ │ │ │ ├───┘ ╶─┴─────┤ ╷ ├─────┤ │ ┌───╴ │ ╵ ├─╴ ├─┐ └───┬─┤ │ ┌───┴─────┬───┤ │ │ │ ┌───────────┤ │ │ ┌─╴ ╵ │ └─┐ ┌─┴───┘ ╷ ╵ └─┬─┐ ╵ │ │ │ ┌───┬─╴ │ ╶─┘ │ │ ╵ │ ┌───────┐ │ │ │ └─┬───┴─╴ │ ╵ ┌─────┼───┐ ╵ ├─┐ │ │ ╵ │ ╷ │ ╶─┴─┐ ┌─┘ │ ┌─┘ │ ┌─┐ ╶─┘ │ │ └─┐ │ ╷ ╷ ┌─┴─┐ │ ┌─┐ ╵ ╷ └─┐ ╵ │ │ │ ┌─┴─┤ └───┐ ├─┘ ┌─┴─┘ ┌─┤ ╵ └───┬─┘ ├─╴ │ │ │ └─┤ ╷ └─┤ │ └───┼─╴ ├───┘ │ │ ╵ ╷ └─┐ ╶─┤ │ ┌─┘ ┌─┬─┘ └─┬───┐ ╵ ┌─┤ ┌─┘ │ └─┐ │ └─┐ │ └─╴ ╷ │ ┌─┘ ┌───┤ ├───┴─╴ └─╴ │ ╵ └─╴ │ ╵ ╶─┐ ╵ ╷ └───┘ ╵ ╵ ┌─┴─╴ │ └─╴ │ └─────┘ │ ╵ ╶─┘ ╷ │ └───────────┴───────┴─────┴───┴───────────┴─────┴─────┴─────────┴───────┴─┘ λαβύρινθος

Slide 5

Slide 5 text

Minotaurus

Slide 6

Slide 6 text

x = f (y)

Slide 7

Slide 7 text

referential transparency

Slide 8

Slide 8 text

equational reasoning

Slide 9

Slide 9 text

no side effects comfort vs. clarity

Slide 10

Slide 10 text

lazy vs. strict call by need infinite lists implicit order

Slide 11

Slide 11 text

alias vs. assignment values vs. variables

Slide 12

Slide 12 text

immutable data (effectively)

Slide 13

Slide 13 text

awkward useless slow

Slide 14

Slide 14 text

handy combinators

Slide 15

Slide 15 text

usefull facts/data defensive copy communication via mutation perception of changes REST you can cheat (locally)

Slide 16

Slide 16 text

fast structural sharing strict & lazy & views & iterators

Slide 17

Slide 17 text

GC who will clean the mess

Slide 18

Slide 18 text

Monads

Slide 19

Slide 19 text

┌─────┬─────────┬─────────┬─────────┬───────┬─┬───┬───────────────────────┐ ├─┬─╴ ├─────┐ ╷ │ ╶─┐ ┌─┐ │ ╶───┬─╴ │ ┌───┐ ╵ │ ╷ │ ╷ ╶───┐ ┌───────┬───╴ │ │ │ ┌─┘ ╶─┐ │ ├─┴─╴ │ │ ╵ │ ┌─╴ │ ┌─┘ │ ╷ ├───┘ │ │ └─┬─┐ ├─┘ ┌───┐ │ ╶─┬─┤ │ │ │ ┌─╴ │ │ ╵ ╶─┬─┘ │ ╶─┴─┘ ┌─┘ ╵ ╷ │ ├─┘ ┌───┤ └─┐ │ │ │ ╶─┤ ╶─┤ └─┐ ╵ │ │ │ └─┘ ┌─┤ └───┬─┘ ┌─┴───────┤ ╷ ┌─┘ │ │ ┌─┴─┐ │ ╷ │ │ │ └─┐ ├─╴ ├─╴ ├─╴ │ │ └─────┤ └───╴ │ ┌─┘ ╶───────┤ │ │ ╷ │ ╵ ╵ ╷ ╵ │ └─┤ │ │ ╷ │ │ ╶─┤ ╶─┴─┐ │ │ ╶─┬─╴ │ ┌───┬─┘ │ ┌─────────┴─┴─┴─┘ └─────┴───┴─────┤ │ └─┘ └─╴ ├───┐ │ │ ├─╴ │ ┌─┘ │ ╷ ╵ ╷ │ │ │ ├───┬───┐ │ ╷ │ └─┤ ├───┘ │ ┌─┴─┼───┘ │ │ ├─┘ ┌─┘ ╷ └─┘ │ └─┐ │ │ ╶─┐ │ ╵ ╷ │ ╶───┴─┤ ├───┘ ┌─┴─────┼─┐ │ │ │ ╷ └─┴─┬─┘ │ ╶───┐ │ │ ┌───┘ ┌───╴ ╵ │ │ │ │ ├─┬─╴ │ ╶─┴───┬─┴─┤ ├─┴───╴ │ ┌─────┤ │ │ │ ╵ │ ╶─┴─────┐ ╵ ╷ │ ├─╴ ┌───┼─┘ ┌─┐ │ │ │ ├─┐ ├───┬─╴ ╷ └───┤ │ ├───┘ ╷ │ ╶─┤ │ │ ╵ │ │ ╵ │ ╷ │ ╶─┴───┐ │ │ ├─┐ ┌─┤ └─┐ ╵ │ └─╴ │ ├───┘ │ └─────╴ │ │ ├─┬─────────────┬─┬─┬─────┬─┬─┬───┘ │ ╵ ├─╴ ├─┐ └───┬─┤ │ ┌───┴─────┬───┤ │ │ │ ┌───────────┤ │ │ ┌─╴ ╵ │ └─┐ ┌─┴───┘ ╷ ╵ └─┬─┐ ╵ │ │ │ ┌───┬─╴ │ ╶─┘ │ │ ╵ │ ┌───────┐ │ │ │ └─┬───┴─╴ │ ╵ ┌─────┼───┐ ╵ ├─┐ │ │ ╵ │ ╷ │ ╶─┴─┐ ┌─┘ │ ┌─┘ │ ┌─┐ ╶─┘ │ │ └─┐ │ ╷ ╷ ┌─┴─┐ │ ┌─┐ ╵ ╷ └─┐ ╵ │ │ │ ┌─┴─┤ └───┐ ├─┘ ┌─┴─┘ ┌─┤ ╵ └───┬─┘ ├─╴ │ │ │ └─┤ ╷ └─┤ │ └───┼─╴ ├───┘ │ │ ╵ ╷ └─┐ ╶─┤ │ ┌─┘ ┌─┬─┘ └─┬───┐ ╵ ┌─┤ ┌─┘ │ └─┐ │ └─┐ │ └─╴ ╷ │ ┌─┘ ┌───┤ ├───┴─╴ └─╴ │ ╵ └─╴ │ ╵ ╶─┐ ╵ ╷ └───┘ ╵ ╵ ┌─┴─╴ │ └─╴ │ └─────┘ │ ╵ ╶─┘ ╷ │ └───────────┴───────┴─────┴───┴───────────┴─────┴─────┴─────────┴───────┴─┘ Μῑνώταυρος

Slide 20

Slide 20 text

tests sonOf ("Minos") == "Asterion"

Slide 21

Slide 21 text

objects vs. ADT expression problem polymorphism vs. pattern matching

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Starring: Alan Turing as Daedalos (Δ ) αίδαλος John von Neumann as Íkaros ( ) καρος Peter Landin as Minōs ( ) Μίνως Ada Lovelace as Pasipháē ( ) Πασιφάη Alonzo Church as Cretan Bull Kurt Gödel as Poseidon ( ) Ποσειδῶν Joseph Marie Jacquard as Hēlios ( ) Ἠέλιος Tony Hoare as Minotaurus (Μῑνώταυρος) John McCarthy as Theseus ( ) Θησεύς Grace Hopper as Ariadne ( ) Ἀριάδνη