Functional Programming in Swift with Bow

Functional Programming in Swift with Bow

Swift offers many features to enable Functional Programming, but still lacks some important concepts. With Bow, a library for FP written in Swift, these shortcomings are addressed.

90a2784ff299fdc5b0a46893680e4a44?s=128

Tomás Ruiz-López

October 17, 2019
Tweet

Transcript

  1. Functional Programming in Swift with Bow Tomás Ruiz-López Technical Lead

    at 47 Degrees @tomasruizlopez @tomasruizlopez | #LambdaWorld | @bow_swift      
  2. Swift & FP Higher-order functions @tomasruizlopez | #LambdaWorld | @bow_swift

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

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

    | @bow_swift      
  5. Swift & FP Structs, Tuples and Enums Products and Sum

    types, Pattern matching @tomasruizlopez | #LambdaWorld | @bow_swift      
  6. Swift & FP Optional and Result built in @tomasruizlopez |

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

    | @bow_swift      
  8. Swift & FP SwiftUI and Combine Declarative and Reactive Programming

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

  10. Higher Kinded Types Lightweight higher-kinded polymorphism Jeremy Yallop and Leo

    White @tomasruizlopez | #LambdaWorld | @bow_swift      
  11. Type classes Semigroup, Monoid Invariant, Functor, Applicative, Selective, Monad ApplicativeError,

    MonadError Foldable, Traverse MonadReader, MonadWriter, MonadState @tomasruizlopez | #LambdaWorld | @bow_swift      
  12. 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      
  13. Effects Effects type class hierarchy Bifunctor IO<E, A> Environmental Effects

    EnvIO<D, E, A> @tomasruizlopez | #LambdaWorld | @bow_swift      
  14. Optics Iso, Getter, Setter, Lens, Optional, Prism Fold, Traversal Polymorphic

    versions Type classes: Cons, Snoc, At, Index, FilterIndex, Each @tomasruizlopez | #LambdaWorld | @bow_swift      
  15. Streams Integration with RxSwift @tomasruizlopez | #LambdaWorld | @bow_swift 

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

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

  18. Side projects nef bow-openapi bow-meta @tomasruizlopez | #LambdaWorld | @bow_swift

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

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