Functional Programming With Scala Cats

Posted By: ELK1nG

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

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