Slide 1

Slide 1 text

@pacoworks Paco Estevez “Stop ****ing up our language” The FP ecosystem in Kotlin

Slide 2

Slide 2 text

@pacoworks Arrow: arrow-kt.io 2

Slide 3

Slide 3 text

@pacoworks Version 0.10 - Released this month! 2.5 years running 3

Slide 4

Slide 4 text

@pacoworks Stop 4 First interaction with Kotlin leadership

Slide 5

Slide 5 text

@pacoworks 5 Meme: “I’m Spanish but I haven’t come to talk about FP”

Slide 6

Slide 6 text

@pacoworks Funktionale + Kategory = Arrow 6

Slide 7

Slide 7 text

@pacoworks Tens of known Apps, as many backends Talks around the world Multiple books 3k Github stars 7

Slide 8

Slide 8 text

@pacoworks Consultancies 8 Legitimate now

Slide 9

Slide 9 text

@pacoworks What is in it? 9

Slide 10

Slide 10 text

@pacoworks Boring libraries 10 Prelude Effect system Optics Metaprogramming utils soon

Slide 11

Slide 11 text

@pacoworks Incubator libraries 11 Recursion Schemes MTL Free AQL Streams Collections

Slide 12

Slide 12 text

@pacoworks Most important contribution? 12

Slide 13

Slide 13 text

@pacoworks 13

Slide 14

Slide 14 text

@pacoworks 14

Slide 15

Slide 15 text

@pacoworks 15

Slide 16

Slide 16 text

@pacoworks 16

Slide 17

Slide 17 text

@pacoworks Arrow Docs 17

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

@pacoworks Arrow Fx 20

Slide 21

Slide 21 text

@pacoworks Principles 21 Based off existing research Uses coroutines Flattened IO combinators

Slide 22

Slide 22 text

@pacoworks Primitives 22 fx for syntax effect to wrap ! to compute

Slide 23

Slide 23 text

23

Slide 24

Slide 24 text

@pacoworks Future of Fx 24 Bifunctor IO Reader + Bifunctor IO Streams

Slide 25

Slide 25 text

@pacoworks Arrow Core 25

Slide 26

Slide 26 text

@pacoworks Prelude I 26 Anaemic stdlib Datatypes

Slide 27

Slide 27 text

@pacoworks Kind 27

Slide 28

Slide 28 text

@pacoworks F 28

Slide 29

Slide 29 text

@pacoworks class ForList private constructor() 29

Slide 30

Slide 30 text

@pacoworks class ForSequence private constructor() class ForOption private constructor() class ForTry private constructor() class ForId private constructor() class ForSet private constructor() 30

Slide 31

Slide 31 text

@pacoworks Kind isomorphism Option 31 <--- <---

Slide 32

Slide 32 text

@pacoworks class Option: Kind 32

Slide 33

Slide 33 text

@pacoworks fun Kind.fix(): Option = 33

Slide 34

Slide 34 text

@pacoworks Extension functions are checked at compile time 34

Slide 35

Slide 35 text

Slide 36

Slide 36 text

@pacoworks Prelude II 36 Anaemic stdlib Datatypes Typeclasses

Slide 37

Slide 37 text

@pacoworks fun Kind.map( f: (A) -> B, ): Kind 37

Slide 38

Slide 38 text

@pacoworks 38

Slide 39

Slide 39 text

39

Slide 40

Slide 40 text

@pacoworks Arrow Meta 40

Slide 41

Slide 41 text

@pacoworks Tinkering… 41 Quasiquoting Hacking the typechecker Purity checker Coherent typeclass implementation

Slide 42

Slide 42 text

@pacoworks …in the real world 42 Early days Lots of potential experiments Focus on industrial uses

Slide 43

Slide 43 text

@pacoworks Growing an ecosystem 43

Slide 44

Slide 44 text

@pacoworks Letting talent flourish 44 Optics - Simon Vergauwen Recursion Schemes - Aedan Smith Free - Pablo Guardiola

Slide 45

Slide 45 text

@pacoworks Sister projects 45 Ank Helios Kessel Hoplite KotlinTest

Slide 46

Slide 46 text

@pacoworks Papers in Practice 46 The Frank language: Do be do be do Selective Applicative Functors Build Systems a la Carte Defunctionalized Kind Projections

Slide 47

Slide 47 text

@pacoworks Come join us! 47

Slide 48

Slide 48 text

@pacoworks Community ❤ gitter.im/arrow-kt/ 48 138 github contributors Gitter.im chat Kotlinlang slack #arrow

Slide 49

Slide 49 text

@pacoworks Arrow: arrow-kt.io pacoworks.com @pacoworks github.com/pakoito Slides: tinyurl.com/ArrowAle19 49 Special thanks to all Arrow contributors & supporters!