Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The FP ecosystem in Kotlin

pakoito
September 21, 2019

The FP ecosystem in Kotlin

Arrow is a Kotlin library that has brought support for HKTs and type classes into the language. On top of that we have ported a good chunk of the FP stack including comprehensions, lenses, recursion schemes, and a blazing fast effects system. This enables experimenting with Haskell papers that you can seamlessly run on your phone.

The other aspect of Arrow is that it’s already widespread in the industry and is being used by startups and banks. It works on top of the vanilla Kotlin toolset, so it is safe to bring into your JVM programs. Bring your favorite FP constructs onto your day-to-day job!

pakoito

September 21, 2019
Tweet

More Decks by pakoito

Other Decks in Programming

Transcript

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

    View Slide

  2. @pacoworks
    Arrow: arrow-kt.io
    2

    View Slide

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

    View Slide

  4. @pacoworks
    Stop
    4
    First interaction with Kotlin leadership

    View Slide

  5. @pacoworks
    5
    Meme:

    “I’m Spanish but I haven’t come to
    talk about FP”

    View Slide

  6. @pacoworks
    Funktionale + Kategory = Arrow
    6

    View Slide

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

    View Slide

  8. @pacoworks
    Consultancies
    8
    Legitimate now

    View Slide

  9. @pacoworks
    What is in it?
    9

    View Slide

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

    View Slide

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

    View Slide

  12. @pacoworks
    Most important contribution?
    12

    View Slide

  13. @pacoworks
    13

    View Slide

  14. @pacoworks
    14

    View Slide

  15. @pacoworks
    15

    View Slide

  16. @pacoworks
    16

    View Slide

  17. @pacoworks
    Arrow Docs
    17

    View Slide

  18. 18

    View Slide

  19. 19

    View Slide

  20. @pacoworks
    Arrow Fx
    20

    View Slide

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

    View Slide

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

    View Slide

  23. 23

    View Slide

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

    View Slide

  25. @pacoworks
    Arrow Core
    25

    View Slide

  26. @pacoworks
    Prelude I
    26
    Anaemic stdlib
    Datatypes

    View Slide

  27. @pacoworks
    Kind
    27

    View Slide

  28. @pacoworks
    F
    28

    View Slide

  29. @pacoworks
    class ForList private constructor()
    29

    View Slide

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

    View Slide

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

    View Slide

  32. @pacoworks
    class Option: Kind
    32

    View Slide

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

    View Slide

  34. @pacoworks
    Extension functions are checked at compile time
    34




    View Slide

  35. @pacoworks
    fun Kind.fix(): Option =
    this as Option
    35
    Safe!
    Pinkie promise
    Totally ok

    View Slide

  36. @pacoworks
    Prelude II
    36
    Anaemic stdlib
    Datatypes
    Typeclasses

    View Slide

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

    View Slide

  38. @pacoworks
    38

    View Slide

  39. 39

    View Slide

  40. @pacoworks
    Arrow Meta
    40

    View Slide

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

    View Slide

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

    View Slide

  43. @pacoworks
    Growing an ecosystem
    43

    View Slide

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

    View Slide

  45. @pacoworks
    Sister projects
    45
    Ank
    Helios
    Kessel
    Hoplite
    KotlinTest

    View Slide

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

    View Slide

  47. @pacoworks
    Come join us!
    47

    View Slide

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

    View Slide

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

    View Slide