Slide 1

Slide 1 text

Functional Programming in Swift with Bow Tomás Ruiz-López Technical Lead at 47 Degrees @tomasruizlopez @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 2

Slide 2 text

Swift & FP Higher-order functions @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 3

Slide 3 text

Swift & FP Value semantics Immutability @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 4

Slide 4 text

Swift & FP Protocol-oriented programming Type classes @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 5

Slide 5 text

Swift & FP Structs, Tuples and Enums Products and Sum types, Pattern matching @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 6

Slide 6 text

Swift & FP Optional and Result built in @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 7

Slide 7 text

Swift & FP Combinators: map, flatMap, compactMap @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 8

Slide 8 text

Swift & FP SwiftUI and Combine Declarative and Reactive Programming @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 9

Slide 9 text

@tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 10

Slide 10 text

Higher Kinded Types Lightweight higher-kinded polymorphism Jeremy Yallop and Leo White @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 11

Slide 11 text

Type classes Semigroup, Monoid Invariant, Functor, Applicative, Selective, Monad ApplicativeError, MonadError Foldable, Traverse MonadReader, MonadWriter, MonadState @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 12

Slide 12 text

Data types Core types: Id, Const, Option, Either, Validated, Ior, Eval Arrow: Function0, Function1, Kleisli, Cokleisli Collections: ArrayK, NonEmptyArray, SetK, DictionaryK Transformers: ReaderT, StateT, WriterT, OptionT, EitherT @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 13

Slide 13 text

Effects Effects type class hierarchy Bifunctor IO Environmental Effects EnvIO @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 14

Slide 14 text

Optics Iso, Getter, Setter, Lens, Optional, Prism Fold, Traversal Polymorphic versions Type classes: Cons, Snoc, At, Index, FilterIndex, Each @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 15

Slide 15 text

Streams Integration with RxSwift @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 16

Slide 16 text

Experimental Free monads Recursion schemes Generic programming @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 17

Slide 17 text

@tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 18

Slide 18 text

Side projects nef bow-openapi bow-meta @tomasruizlopez | #LambdaWorld | @bow_swift      

Slide 19

Slide 19 text

Thanks! Bow Tomás Ruiz-López: Bow: | @tomasruizlopez @bow_swift bow-swift.io @tomasruizlopez | #LambdaWorld | @bow_swift      