1. Урок 1.00:05:05
    Create linear data flow with container style types (Box)
  2. Урок 2.00:04:45
    Refactor imperative code to a single composed expression using Box
  3. Урок 3.00:05:59
    Enforce a null check with composable code branching using Either
  4. Урок 4.00:03:58
    Use chain for composable error handling with nested Eithers
  5. Урок 5.00:02:06
    A collection of Either examples compared to imperative code
  6. Урок 6.00:05:53
    Create types with Semigroups
  7. Урок 7.00:02:02
    Semigroup examples
  8. Урок 8.00:04:34
    Ensure failsafe combination using monoids
  9. Урок 9.00:01:13
    A curated collection of Monoids and their uses
  10. Урок 10.00:02:51
    Unbox types with foldMap
  11. Урок 11.00:01:27
    Delay Evaluation with LazyBox
  12. Урок 12.00:02:59
    Capture Side Effects in a Task
  13. Урок 13.00:03:47
    Use Task for Asynchronous Actions
  14. Урок 14.00:03:20
    You've been using Functors
  15. Урок 15.00:01:22
    Lift into a Pointed Functor with of
  16. Урок 16.00:05:44
    You've been using Monads
  17. Урок 17.00:04:51
    Build curried functions
  18. Урок 18.00:02:19
    Applicative Functors for multiple arguments
  19. Урок 19.00:04:43
    Apply multiple functors as arguments to a function (Applicatives)
  20. Урок 20.00:02:15
    List comprehensions with Applicative Functors
  21. Урок 21.00:01:38
    Write applicatives for concurrent actions
  22. Урок 22.00:02:53
    Leapfrogging types with Traversable
  23. Урок 23.00:02:36
    Maintaining structure whilst asyncing
  24. Урок 24.00:04:04
    Principled type conversions with Natural Transformations
  25. Урок 25.00:04:31
    Apply Natural Transformations in everyday work
  26. Урок 26.00:04:24
    Isomorphisms and round trip data transformations
  27. Урок 27.00:06:13
    Build a data flow for a real world app
  28. Урок 28.00:07:08
    Retrieve and use data from an api with pure functional constructs
  29. Урок 29.00:05:58
    Find the intersection of sets with Semigroups