Functional Programming With Scala Cats
Last updated 6/2022
MP4 | Video: h264, 1280x720 | Audio: AAC, 44.1 KHz
Language: English | Size: 2.06 GB | Duration: 12h 50m
Last updated 6/2022
MP4 | Video: h264, 1280x720 | Audio: AAC, 44.1 KHz
Language: English | Size: 2.06 GB | Duration: 12h 50m
A journey into the world of typeclasses, the Cats library, and the functional way of doing things in Scala
What you'll learn
Create own typeclasses
Write and use lawful instances of well-known typeclasses such as Functors, Applicatives, Monads, etc.
Perform common programming tasks (validation, dependency injection, state management, etc.) in a functional way.
Requirements
Working knowledge of the Scala language (case classes, pattern matching, traits, implicits, etc.)
Basic understanding of the Scala library (List, Map, Set, etc.)
(Nice to have) Some experience using the basic higher order methods such as map, flatMap and fold
Description
When we start our journey as a Scala developer, our first impression of the language may be that of 'a better Java'. We learn about classes, traits, pattern matching and some other constructs that make our life easier. At some point we come across the amazing higher-order methods such as map, filter and fold. These serve as a great first taste of functional programming.But what if I told you that there is much more than that? In this course I will show you how standard functional programming practices can help you write code that is more generic, robust and testable.This course is divided into 3 main sections.In the first section, we will learn about typeclasses. We will use as a driving example the problem of encoding and decoding objects into and from bytes. By the end of this section you will be able to create your own typeclasses and use the typeclass pattern to write polymorphic code.In the second section, we will take a look at some of the most common typeclasses in functional programming, including Monads, Applicatives, Functors and many more. We will use the famous Cats library to provide us with their implementations, and we will use Discipline along with ScalaCheck and ScalaTest to test their laws. By the end of this section, you will be able to write lawful instances of these typeclasses for any of your types, and test their validity in an automated manner.In the third and final section, we will learn to perform many common programming tasks with functional structures. These tasks include:- Validations via the Validated datatype- Dependency injection with the Reader monad- Tracking data in our computations with the Writer monad- Managing state with the State monad- Writing stack safe computations with Trampolines- Making computations lazy with the Eval monad- Composing monad stacks via monad transformers such as ReaderT and OptionT- Suspending effects with a simple but useful implementation of the IO monadI'm a big believer of learning by doing so I've included a lot of in-video exercises, along with quizzes and assignments at the end of each section. I hope you enjoy doing them as much as I enjoyed putting them together!Without further ado, I want to give you a big welcome to the course and the thrilling world of functional programming!
Overview
Section 1: Introduction
Lecture 1 Introduction
Lecture 2 Project Setup
Lecture 3 Course files
Section 2: Typeclasses
Lecture 4 Introduction
Lecture 5 Channel - Any
Lecture 6 Channel - Any - Code
Lecture 7 Channel - Inheritance
Lecture 8 Channel - Inheritance - Code
Lecture 9 Channel - Typeclasses
Lecture 10 Channel - Typeclasses - Code
Lecture 11 Channel - Typeclasses - Advantages
Lecture 12 Implicits and Helper Methods
Lecture 13 Implicits and Helper Methods - Code - Organizing instances
Lecture 14 Implicits and Helper Methods - Code - Organizing instances #2
Lecture 15 Implicits and Helper Methods - Code - Summoner method
Lecture 16 Implicits and Helper Methods - Code - Instance method
Lecture 17 Channel - Read
Lecture 18 Channel - Read - Code
Lecture 19 Laws
Lecture 20 Laws - Code
Lecture 21 Automatic instance derivation
Lecture 22 Syntax
Lecture 23 Syntax - Code
Lecture 24 Summary
Lecture 25 Assignment: Creating our own typeclass
Section 3: Well known typeclasses
Lecture 26 Introduction
Lecture 27 Eq
Lecture 28 Eq - Code
Lecture 29 Order
Lecture 30 Order - Code
Lecture 31 Show
Lecture 32 Show - Code
Lecture 33 Monoid
Lecture 34 Monoid - Code - Speed
Lecture 35 Monoid - Code - Exercises
Lecture 36 Higher Kinded Types
Lecture 37 Functor
Lecture 38 Functor - Code
Lecture 39 Applicative
Lecture 40 Applicative - Code - Validated
Lecture 41 Applicative - Code - Option
Lecture 42 Monad
Lecture 43 Monad - Code - Option
Lecture 44 Monad - Code - List
Lecture 45 Monad - Code - Either
Lecture 46 Monad - Code - Try
Lecture 47 Monad Error
Lecture 48 Monad Error - Code - Instances
Lecture 49 Monad Error - Code - Example
Lecture 50 Monad Error - Code - Additional Functions
Lecture 51 Foldable - FoldRight
Lecture 52 Foldable - FoldLeft
Lecture 53 Foldable - Typeclass
Lecture 54 Foldable - Code - MList
Lecture 55 Foldable - Code - Find
Lecture 56 Foldable - Code - Exists
Lecture 57 Foldable - Code - To List
Lecture 58 Foldable - Code - For All
Lecture 59 Traverse
Lecture 60 Traverse - Code - MList
Lecture 61 Traverse - Code - Option
Lecture 62 Testing - Box
Lecture 63 Testing - Instances
Lecture 64 Testing - Properties
Lecture 65 Summary
Lecture 66 Assignment: The Get Monad
Section 4: Functional Techniques
Lecture 67 Introduction
Lecture 68 Validations
Lecture 69 Validations - Code
Lecture 70 Dependency Injection
Lecture 71 Dependency Injection - Code - The Reader Monad
Lecture 72 Dependency Injection - Code - Modularization
Lecture 73 Dependency Injection - Code - Exercise
Lecture 74 Tracking
Lecture 75 Tracking - Code - The Writer Monad
Lecture 76 Tracking - Code - Discounts Example
Lecture 77 Tracking - Code - Exercise
Lecture 78 State Management
Lecture 79 State Management - Code - The State Monad
Lecture 80 State Management - Code - Tic Tac Toe Example
Lecture 81 Trampolines
Lecture 82 Trampolines - Code - IsEven
Lecture 83 Trampolines - Code - FlatMap
Lecture 84 Evaluation Modes
Lecture 85 Evaluation Modes - Code - The Eval Monad
Lecture 86 Evaluation Modes - Code - Stream Example
Lecture 87 TailRecM
Lecture 88 Monad Transformers
Lecture 89 Monad Transformers - Code - ReaderT
Lecture 90 Monad Transformers - Code - OptionT
Lecture 91 Suspending Side Effects
Lecture 92 Suspending Side Effects - Code - IO
Lecture 93 Suspending Side Effects - Code - Monad
Lecture 94 Summary
Section 5: Final Project
Lecture 95 Introduction
Lecture 96 Overview
Lecture 97 Architecture
Lecture 98 Validations
Lecture 99 Generators
Lecture 100 Person
Lecture 101 Money
Lecture 102 Expense
Lecture 103 DebtByPayee
Lecture 104 DebtByPayer
Lecture 105 PersonService
Lecture 106 ExpenseService
Lecture 107 IO
Lecture 108 Syntax
Lecture 109 Command - readParticipants
Lecture 110 Command - validateData
Lecture 111 Command - findPerson
Lecture 112 Command - addPerson
Lecture 113 App
Scala developers with 1 or 2 years of experience who want to learn the functional side of the language,Students who have completed an introductory Scala course and are willing to learn more advanced features