SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
Diving into Monads
in Cats Library
Presented By: Muskan Gupta
Software Consultant
Knoldus Inc.
About Knoldus
Knoldus is a technology consulting firm with focus on modernizing the digital systems
at the pace your business demands.
DevOps
Functional. Reactive. Cloud Native
01 What is Monad
02 Introduction to Cats
03 Monads in Cats Library
04 Either Monad
05 Identity Monad
Our Agenda
05
06 Eval Monad
c
What is Monad?
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
c
What is Monad?
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
Monad has at least
two methods :
○ pure of type[A] =>
F[A]
This can be
considered as
constructor.
○ flatMap of type
(F[A], A => F[B])
=> F[B]
This is for
sequencing.
c
Monad Laws
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
pure and flatMap should follow following laws:
● Left Identity: calling pure and transforming the result with func is the
same as calling func:
pure(a).flatMap(func) == func(a)
● Right Identity: passing pure to flatMap is the same as doing nothing:
m.flatMap(pure) == m
● Associativity: flatMapping over two functions f and g is the same as
flatMapping over f and then flatMapping over g:
m.flatMap(f).flatMap(g) == m.flatMap(x => f(x).flatMap(g))
c
What is Cats?
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
● Cats is a library which provides abstractions for functional
programming in the Scala programming language.
● Most of the tools provided by Cats are implemented as type classes.
● Following are the imports:
○ For getting that type class - import cats.{typeClass Name}
○ For getting all instances - import.instances.all._
○ For getting all the syntax - import cats.syntax.all._
○ For getting all the instances and syntax together - import
cats.implicits._
c
Monads in Cats
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
● Monad is a simple type class that extends two type classes:
○ FlatMap to get flatMap method
○ Applicative for pure method
● Simple imports:
○ For using Monad in code : import cats.Monad
○ For using default instances in the code : import
cats.instances.all._
○ For getting monad syntax: import cats.syntax.flatMap._
import cats.synatx.map._
import cats.syntax.applicative._
c
Either Monad
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
Either in Scala Library
Either in Cats Library
c
Either in Cats vs Either in Scala
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
Issue with return type resolved
Right Biased
Extension Methods
c
ID Monad
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
According to book
In simple words :
ID monad provides you a monadic instance for non-monadic type.
For example:
c
Need of ID Monad
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
It let’s you abstract over monadic and non-monadic code.
Example:
Calling with Monadic Values
Calling with Non-Monadic Values
ID Monad to rescue
c
Eval Monad
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
Model of evaluation
● Eager: computations happen immediately.
● Lazy: computations happen on access.
● Memoized: computations happen on first access only and then the results are cached.
Eval monad has three subtypes:
● Now - It is eager and memoized.
c
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
● Always - It is lazy and non-memoized.
● Later - It is lazy and memoized.
c
Why Eval Monad?
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
● .map and flatMap method, helpful in chaining methods.
● memoize capability in chaining methods.
c
Why Eval Monad
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
● stack-safety of map and flatMap method and defer method
A simple factorial method:
● Eval.defer to rescue:
c
References
“Contrary to popular belief, Lorem
Ipsum is not simply random text.
Lorem Ipsum is not simply
random text. “
Norton
Bible-Designer
● Scala with Cats Book by Noel Welsh and Dave Gurnell
● Exploring Eval Monad in Cats
● Explore ID Monad in Cats
● Either in Cats vs Either in Scala
Thank You!
muskan.gupta@knoldus.
com
Muskan Gupta

Weitere ähnliche Inhalte

Ähnlich wie Diving into Monads in Cats Library

rsec2a-2016-jheaton-morning
rsec2a-2016-jheaton-morningrsec2a-2016-jheaton-morning
rsec2a-2016-jheaton-morning
Jeff Heaton
 
Python at yhat (august 2013)
Python at yhat (august 2013)Python at yhat (august 2013)
Python at yhat (august 2013)
Austin Ogilvie
 

Ähnlich wie Diving into Monads in Cats Library (20)

Xavier Amatriain, VP of Engineering, Quora at MLconf SF - 11/13/15
Xavier Amatriain, VP of Engineering, Quora at MLconf SF - 11/13/15Xavier Amatriain, VP of Engineering, Quora at MLconf SF - 11/13/15
Xavier Amatriain, VP of Engineering, Quora at MLconf SF - 11/13/15
 
10 more lessons learned from building Machine Learning systems - MLConf
10 more lessons learned from building Machine Learning systems - MLConf10 more lessons learned from building Machine Learning systems - MLConf
10 more lessons learned from building Machine Learning systems - MLConf
 
10 more lessons learned from building Machine Learning systems
10 more lessons learned from building Machine Learning systems10 more lessons learned from building Machine Learning systems
10 more lessons learned from building Machine Learning systems
 
Software testing (2) trainingin-mumbai...
Software testing (2) trainingin-mumbai...Software testing (2) trainingin-mumbai...
Software testing (2) trainingin-mumbai...
 
TDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-LanguageTDC 2020 - Implementing a Mini-Language
TDC 2020 - Implementing a Mini-Language
 
Data oriented design and c++
Data oriented design and c++Data oriented design and c++
Data oriented design and c++
 
An Introduction to Machine Learning
An Introduction to Machine LearningAn Introduction to Machine Learning
An Introduction to Machine Learning
 
Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016Not Your Fathers C - C Application Development In 2016
Not Your Fathers C - C Application Development In 2016
 
What is dev ops?
What is dev ops?What is dev ops?
What is dev ops?
 
From devoops to devops
From devoops to devopsFrom devoops to devops
From devoops to devops
 
Machine Learning in News Media: Case study 24sata.hr - Marko Velic, Enes Deumic
Machine Learning in News Media: Case study 24sata.hr - Marko Velic, Enes DeumicMachine Learning in News Media: Case study 24sata.hr - Marko Velic, Enes Deumic
Machine Learning in News Media: Case study 24sata.hr - Marko Velic, Enes Deumic
 
Static-Analysis-in-Industry.pptx
Static-Analysis-in-Industry.pptxStatic-Analysis-in-Industry.pptx
Static-Analysis-in-Industry.pptx
 
rsec2a-2016-jheaton-morning
rsec2a-2016-jheaton-morningrsec2a-2016-jheaton-morning
rsec2a-2016-jheaton-morning
 
Trip Report from Meeting C++ 2017: It's Way More Than C++
Trip Report from Meeting C++ 2017: It's Way More Than C++Trip Report from Meeting C++ 2017: It's Way More Than C++
Trip Report from Meeting C++ 2017: It's Way More Than C++
 
Open Source Monitoring in 2019
Open Source Monitoring in 2019 Open Source Monitoring in 2019
Open Source Monitoring in 2019
 
Python at yhat (august 2013)
Python at yhat (august 2013)Python at yhat (august 2013)
Python at yhat (august 2013)
 
Python for ML.pptx
Python for ML.pptxPython for ML.pptx
Python for ML.pptx
 
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmxMoved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
Moved to https://slidr.io/azzazzel/web-application-performance-tuning-beyond-xmx
 
MongoDB World 2019: Don't Panic - The Hitchhiker's Guide to the MongoDB Galaxy
MongoDB World 2019: Don't Panic - The Hitchhiker's Guide to the MongoDB GalaxyMongoDB World 2019: Don't Panic - The Hitchhiker's Guide to the MongoDB Galaxy
MongoDB World 2019: Don't Panic - The Hitchhiker's Guide to the MongoDB Galaxy
 
Think Like a Programmer
Think Like a ProgrammerThink Like a Programmer
Think Like a Programmer
 

Mehr von Knoldus Inc.

Mehr von Knoldus Inc. (20)

Supply chain security with Kubeclarity.pptx
Supply chain security with Kubeclarity.pptxSupply chain security with Kubeclarity.pptx
Supply chain security with Kubeclarity.pptx
 
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML ParsingMastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
Mastering Web Scraping with JSoup Unlocking the Secrets of HTML Parsing
 
Akka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On IntroductionAkka gRPC Essentials A Hands-On Introduction
Akka gRPC Essentials A Hands-On Introduction
 
Entity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptxEntity Core with Core Microservices.pptx
Entity Core with Core Microservices.pptx
 
Introduction to Redis and its features.pptx
Introduction to Redis and its features.pptxIntroduction to Redis and its features.pptx
Introduction to Redis and its features.pptx
 
GraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdfGraphQL with .NET Core Microservices.pdf
GraphQL with .NET Core Microservices.pdf
 
NuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptxNuGet Packages Presentation (DoT NeT).pptx
NuGet Packages Presentation (DoT NeT).pptx
 
Data Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable TestingData Quality in Test Automation Navigating the Path to Reliable Testing
Data Quality in Test Automation Navigating the Path to Reliable Testing
 
K8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose KubernetesK8sGPTThe AI​ way to diagnose Kubernetes
K8sGPTThe AI​ way to diagnose Kubernetes
 
Introduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptxIntroduction to Circle Ci Presentation.pptx
Introduction to Circle Ci Presentation.pptx
 
Robusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptxRobusta -Tool Presentation (DevOps).pptx
Robusta -Tool Presentation (DevOps).pptx
 
Optimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptxOptimizing Kubernetes using GOLDILOCKS.pptx
Optimizing Kubernetes using GOLDILOCKS.pptx
 
Azure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptxAzure Function App Exception Handling.pptx
Azure Function App Exception Handling.pptx
 
CQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptxCQRS Design Pattern Presentation (Java).pptx
CQRS Design Pattern Presentation (Java).pptx
 
ETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake PresentationETL Observability: Azure to Snowflake Presentation
ETL Observability: Azure to Snowflake Presentation
 
Scripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics PresentationScripting with K6 - Beyond the Basics Presentation
Scripting with K6 - Beyond the Basics Presentation
 
Getting started with dotnet core Web APIs
Getting started with dotnet core Web APIsGetting started with dotnet core Web APIs
Getting started with dotnet core Web APIs
 
Introduction To Rust part II Presentation
Introduction To Rust part II PresentationIntroduction To Rust part II Presentation
Introduction To Rust part II Presentation
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Configuring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRAConfiguring Workflows & Validators in JIRA
Configuring Workflows & Validators in JIRA
 

Kürzlich hochgeladen

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Kürzlich hochgeladen (20)

04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

Diving into Monads in Cats Library

  • 1. Diving into Monads in Cats Library Presented By: Muskan Gupta Software Consultant Knoldus Inc.
  • 2. About Knoldus Knoldus is a technology consulting firm with focus on modernizing the digital systems at the pace your business demands. DevOps Functional. Reactive. Cloud Native
  • 3. 01 What is Monad 02 Introduction to Cats 03 Monads in Cats Library 04 Either Monad 05 Identity Monad Our Agenda 05 06 Eval Monad
  • 4. c What is Monad? “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer
  • 5. c What is Monad? “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer Monad has at least two methods : ○ pure of type[A] => F[A] This can be considered as constructor. ○ flatMap of type (F[A], A => F[B]) => F[B] This is for sequencing.
  • 6. c Monad Laws “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer pure and flatMap should follow following laws: ● Left Identity: calling pure and transforming the result with func is the same as calling func: pure(a).flatMap(func) == func(a) ● Right Identity: passing pure to flatMap is the same as doing nothing: m.flatMap(pure) == m ● Associativity: flatMapping over two functions f and g is the same as flatMapping over f and then flatMapping over g: m.flatMap(f).flatMap(g) == m.flatMap(x => f(x).flatMap(g))
  • 7. c What is Cats? “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer ● Cats is a library which provides abstractions for functional programming in the Scala programming language. ● Most of the tools provided by Cats are implemented as type classes. ● Following are the imports: ○ For getting that type class - import cats.{typeClass Name} ○ For getting all instances - import.instances.all._ ○ For getting all the syntax - import cats.syntax.all._ ○ For getting all the instances and syntax together - import cats.implicits._
  • 8. c Monads in Cats “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer ● Monad is a simple type class that extends two type classes: ○ FlatMap to get flatMap method ○ Applicative for pure method ● Simple imports: ○ For using Monad in code : import cats.Monad ○ For using default instances in the code : import cats.instances.all._ ○ For getting monad syntax: import cats.syntax.flatMap._ import cats.synatx.map._ import cats.syntax.applicative._
  • 9. c Either Monad “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer Either in Scala Library Either in Cats Library
  • 10. c Either in Cats vs Either in Scala “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer Issue with return type resolved Right Biased Extension Methods
  • 11. c ID Monad “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer According to book In simple words : ID monad provides you a monadic instance for non-monadic type. For example:
  • 12. c Need of ID Monad “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer It let’s you abstract over monadic and non-monadic code. Example: Calling with Monadic Values Calling with Non-Monadic Values ID Monad to rescue
  • 13. c Eval Monad “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer Model of evaluation ● Eager: computations happen immediately. ● Lazy: computations happen on access. ● Memoized: computations happen on first access only and then the results are cached. Eval monad has three subtypes: ● Now - It is eager and memoized.
  • 14. c “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer ● Always - It is lazy and non-memoized. ● Later - It is lazy and memoized.
  • 15. c Why Eval Monad? “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer ● .map and flatMap method, helpful in chaining methods. ● memoize capability in chaining methods.
  • 16. c Why Eval Monad “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer ● stack-safety of map and flatMap method and defer method A simple factorial method: ● Eval.defer to rescue:
  • 17. c References “Contrary to popular belief, Lorem Ipsum is not simply random text. Lorem Ipsum is not simply random text. “ Norton Bible-Designer ● Scala with Cats Book by Noel Welsh and Dave Gurnell ● Exploring Eval Monad in Cats ● Explore ID Monad in Cats ● Either in Cats vs Either in Scala