SlideShare a Scribd company logo
Effects in functional programming
From IO to ZIO
Effects in functional Programming - @justinhj (C)2019
Benefits of pure functions
Effects in functional Programming - @justinhj (C)2019
Easy to reason about
Easy to combine
Easy to test
Easy to debug
Easy to parallelize
Benefits of pure functions
Effects in functional Programming - @justinhj (C)2019
Easy to reason about
Easy to combine
Easy to test
Easy to debug
Easy to parallelize
Idemotency
Referential transparency
Memoization
Flexible evaluation
1. Total
Effects in functional Programming - @justinhj (C)2019
Pure functions are
Functions that are not total
Effects in functional Programming - @justinhj (C)2019
Functions that are not total
Total functions A -> B return a valid B for every A
Effects in functional Programming - @justinhj (C)2019
Functions that are not total
Total functions A -> B return a valid B for every A
Exceptions are not valid type B
Effects in functional Programming - @justinhj (C)2019
Functions that are not total
Total functions A -> B return a valid B for every A
Exceptions are not valid type B
Lost ability to compose
Effects in functional Programming - @justinhj (C)2019
Effects in functional Programming - @justinhj (C)2019
1.Total
2.Deterministic
Pure functions are
Pure functions are deterministic
Effects in functional Programming - @justinhj (C)2019
Pure functions are deterministic
Each A passed to whatDoIDo returns a different B for every call
Effects in functional Programming - @justinhj (C)2019
Pure functions are deterministic
Harder to reason about
Effects in functional Programming - @justinhj (C)2019
Pure functions are deterministic
Harder to test
Effects in functional Programming - @justinhj (C)2019
1.Total
2.Deterministic
3.Without side-effects
Pure functions are
Effects in functional Programming - @justinhj (C)2019
Effects in functional Programming - @justinhj (C)2019
Functions that have side effects in the real world are not pure
Functions that have side effects in the real world are not pure
Hard to test
Effects in functional Programming - @justinhj (C)2019
Hard to test
Not referentially transparent
Effects in functional Programming - @justinhj (C)2019
Functions that have side effects in the real world are not pure
Hard to test
Not referentially transparent
Hard to compose
Effects in functional Programming - @justinhj (C)2019
Functions that have side effects in the real world are not pure
Effects in functional Programming - @justinhj (C)2019
Anything you can’t “just” do twice is probably an effect
Effects
Pure functional programs are useless
Output to terminal
Get a record from a database
Updating a counter
Effects in functional Programming - @justinhj (C)2019
Work with random numbers
Pure functional programs are useless
Output to terminal
Get a record from a database
Updating a counter
Effects in functional Programming - @justinhj (C)2019
Work with random numbers
Pure functional programs are useless
Output to terminal
Get a record from a database
Updating a counter
Effects in functional Programming - @justinhj (C)2019
Work with random numbers
Pure functional programs are useless
Output to terminal
Get a record from a database
Work with random numbers
Updating a counter
Effects in functional Programming - @justinhj (C)2019
Pure functional programs are useless
Output to terminal
Get a record from a database
Updating a counter
Effects in functional Programming - @justinhj (C)2019
Work with random numbers
IO monads
Effects in functional Programming - @justinhj (C)2019
Imperative Functional Programming [1993]
https://www.microsoft.com/en-us/research/wp-content/uploads/1993/01/imperative.pdf
P. Wadler and S.L. Peyton-Jones
IO monads
Effects in functional Programming - @justinhj (C)2019
Imperative Functional Programming [1993]
https://www.microsoft.com/en-us/research/wp-content/uploads/1993/01/imperative.pdf
P. Wadler and S.L. Peyton-Jones
IO monads
Effects in functional Programming - @justinhj (C)2019
hello is an effect and we can now do it twice
without breaking referential transparency
IO monads
Effects in functional Programming - @justinhj (C)2019
Lift a pure A to IO[A]
flatMap or bind
sequences two effects together
Monads in Scala
Implemented as a type class
Achieves the same as in Haskell
pure = put an A in a Monad
flatMap = sequence two monads
Effects in functional Programming - @justinhj (C)2019
B
IO Monad - Future
Future is not a Monad
Future execution is eager
http://justinhj.github.io/2018/05/05/hacker-news-api-4.html
Effects in functional Programming - @justinhj (C)2019
Futures allow asynchronous effects
They have pure and bind (Future.success and Future.flatMap)
IO Monad - Future
Effects in functional Programming - @justinhj (C)2019
IO Monad - Future
Future is not a Monad Future execution is eager
http://justinhj.github.io/2018/05/05/hacker-news-api-4.html
Effects in functional Programming - @justinhj (C)2019
IO Monad - Scalaz
Runar Bjarnason
https://apocalisp.wordpress.com/2011/12/19/towards-an-effect-system-in-scala-part-2-io-monad/
Direct conversion from Haskell
Effects in functional Programming - @justinhj (C)2019
IO Monad - Monix (2.x series)
Alex Nedelcuhttps://monix.io/docs/2x/eval/task.html#design-summary
Effects in functional Programming - @justinhj (C)2019
IO Monad - Cats Effect
Effects in functional Programming - @justinhj (C)2019
Monix Task, Scalaz IO/Task became Cats Effect
Includes cancelation, stack safe trampolining, parallel execution and a green
threads system (fibres),
Daniel Spiewak - The Making of an IO
https://www.youtube.com/watch?v=g_jP47HFpWA
IO Monad - Cats Effect
Effects in functional Programming - @justinhj (C)2019
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
http://degoes.net/articles/bifunctor-io
IO[A]
becomes
IO[E, A]
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
Brings errors to type level
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
Brings errors to type level
More efficient than a EitherT
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
ZIO[R,E,A]
http://degoes.net/articles/zio-environment
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
Example ZIO program
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
Sample environment module
IO Monad - ZIO
Effects in functional Programming - @justinhj (C)2019
Test module
Thank you!
Effects in functional Programming - @justinhj (C)2019
Questions?

More Related Content

PDF
Calling c functions from r programming unit 5
PPTX
Functional programming
PDF
Purely Functional I/O
PDF
Monad Fact #6
PDF
Functional Programming in C#: How to write better C# code 1st Edition Enrico ...
PPTX
Functional Programming in Swift
PPTX
Intro to Functional Programming
Calling c functions from r programming unit 5
Functional programming
Purely Functional I/O
Monad Fact #6
Functional Programming in C#: How to write better C# code 1st Edition Enrico ...
Functional Programming in Swift
Intro to Functional Programming

Similar to Pure Functional Effects - from IO to ZIO (20)

PDF
Functional Effects - Part 2
PPTX
Столпы функционального программирования для адептов ООП, Николай Мозговой
PDF
Functional Programming In Scala Second Edition Meap V08 2nd All Chapters Avai...
PPT
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
PPT
Introductory func prog
PDF
One Monad to Rule Them All
PDF
Functional Go
PPTX
Functional IO and Effects
PDF
Functions, Types, Programs and Effects
PPTX
Good functional programming is good programming
PDF
Effecting Pure Change - How anything ever gets done in functional programming...
PDF
A taste of Functional Programming
PPTX
Introduction to Functional Programming
PDF
Functional programming-advantages
PPTX
From Imperative to Functional Programming (for Absolute Beginners)
PDF
Functional Programming in Scala 1st Edition Paul Chiusano
PDF
Functional Programming in Scala 1st Edition Paul Chiusano
PDF
Booting into functional programming
PDF
Functional Effects - Part 1
PDF
Introduction to functional programming (In Arabic)
Functional Effects - Part 2
Столпы функционального программирования для адептов ООП, Николай Мозговой
Functional Programming In Scala Second Edition Meap V08 2nd All Chapters Avai...
Introduction Functional Programming - Tech Hangout #11 - 2013.01.16
Introductory func prog
One Monad to Rule Them All
Functional Go
Functional IO and Effects
Functions, Types, Programs and Effects
Good functional programming is good programming
Effecting Pure Change - How anything ever gets done in functional programming...
A taste of Functional Programming
Introduction to Functional Programming
Functional programming-advantages
From Imperative to Functional Programming (for Absolute Beginners)
Functional Programming in Scala 1st Edition Paul Chiusano
Functional Programming in Scala 1st Edition Paul Chiusano
Booting into functional programming
Functional Effects - Part 1
Introduction to functional programming (In Arabic)
Ad

Recently uploaded (20)

PDF
MIND Revenue Release Quarter 2 2025 Press Release
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Empathic Computing: Creating Shared Understanding
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
Machine learning based COVID-19 study performance prediction
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
cuic standard and advanced reporting.pdf
PPTX
Machine Learning_overview_presentation.pptx
PDF
A comparative analysis of optical character recognition models for extracting...
PPTX
A Presentation on Artificial Intelligence
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Spectroscopy.pptx food analysis technology
MIND Revenue Release Quarter 2 2025 Press Release
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
20250228 LYD VKU AI Blended-Learning.pptx
Building Integrated photovoltaic BIPV_UPV.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Empathic Computing: Creating Shared Understanding
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Digital-Transformation-Roadmap-for-Companies.pptx
Encapsulation_ Review paper, used for researhc scholars
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Machine learning based COVID-19 study performance prediction
Mobile App Security Testing_ A Comprehensive Guide.pdf
cuic standard and advanced reporting.pdf
Machine Learning_overview_presentation.pptx
A comparative analysis of optical character recognition models for extracting...
A Presentation on Artificial Intelligence
Dropbox Q2 2025 Financial Results & Investor Presentation
Spectroscopy.pptx food analysis technology
Ad

Pure Functional Effects - from IO to ZIO

  • 1. Effects in functional programming From IO to ZIO Effects in functional Programming - @justinhj (C)2019
  • 2. Benefits of pure functions Effects in functional Programming - @justinhj (C)2019 Easy to reason about Easy to combine Easy to test Easy to debug Easy to parallelize
  • 3. Benefits of pure functions Effects in functional Programming - @justinhj (C)2019 Easy to reason about Easy to combine Easy to test Easy to debug Easy to parallelize Idemotency Referential transparency Memoization Flexible evaluation
  • 4. 1. Total Effects in functional Programming - @justinhj (C)2019 Pure functions are
  • 5. Functions that are not total Effects in functional Programming - @justinhj (C)2019
  • 6. Functions that are not total Total functions A -> B return a valid B for every A Effects in functional Programming - @justinhj (C)2019
  • 7. Functions that are not total Total functions A -> B return a valid B for every A Exceptions are not valid type B Effects in functional Programming - @justinhj (C)2019
  • 8. Functions that are not total Total functions A -> B return a valid B for every A Exceptions are not valid type B Lost ability to compose Effects in functional Programming - @justinhj (C)2019
  • 9. Effects in functional Programming - @justinhj (C)2019 1.Total 2.Deterministic Pure functions are
  • 10. Pure functions are deterministic Effects in functional Programming - @justinhj (C)2019
  • 11. Pure functions are deterministic Each A passed to whatDoIDo returns a different B for every call Effects in functional Programming - @justinhj (C)2019
  • 12. Pure functions are deterministic Harder to reason about Effects in functional Programming - @justinhj (C)2019
  • 13. Pure functions are deterministic Harder to test Effects in functional Programming - @justinhj (C)2019
  • 14. 1.Total 2.Deterministic 3.Without side-effects Pure functions are Effects in functional Programming - @justinhj (C)2019
  • 15. Effects in functional Programming - @justinhj (C)2019 Functions that have side effects in the real world are not pure
  • 16. Functions that have side effects in the real world are not pure Hard to test Effects in functional Programming - @justinhj (C)2019
  • 17. Hard to test Not referentially transparent Effects in functional Programming - @justinhj (C)2019 Functions that have side effects in the real world are not pure
  • 18. Hard to test Not referentially transparent Hard to compose Effects in functional Programming - @justinhj (C)2019 Functions that have side effects in the real world are not pure
  • 19. Effects in functional Programming - @justinhj (C)2019 Anything you can’t “just” do twice is probably an effect Effects
  • 20. Pure functional programs are useless Output to terminal Get a record from a database Updating a counter Effects in functional Programming - @justinhj (C)2019 Work with random numbers
  • 21. Pure functional programs are useless Output to terminal Get a record from a database Updating a counter Effects in functional Programming - @justinhj (C)2019 Work with random numbers
  • 22. Pure functional programs are useless Output to terminal Get a record from a database Updating a counter Effects in functional Programming - @justinhj (C)2019 Work with random numbers
  • 23. Pure functional programs are useless Output to terminal Get a record from a database Work with random numbers Updating a counter Effects in functional Programming - @justinhj (C)2019
  • 24. Pure functional programs are useless Output to terminal Get a record from a database Updating a counter Effects in functional Programming - @justinhj (C)2019 Work with random numbers
  • 25. IO monads Effects in functional Programming - @justinhj (C)2019 Imperative Functional Programming [1993] https://www.microsoft.com/en-us/research/wp-content/uploads/1993/01/imperative.pdf P. Wadler and S.L. Peyton-Jones
  • 26. IO monads Effects in functional Programming - @justinhj (C)2019 Imperative Functional Programming [1993] https://www.microsoft.com/en-us/research/wp-content/uploads/1993/01/imperative.pdf P. Wadler and S.L. Peyton-Jones
  • 27. IO monads Effects in functional Programming - @justinhj (C)2019 hello is an effect and we can now do it twice without breaking referential transparency
  • 28. IO monads Effects in functional Programming - @justinhj (C)2019 Lift a pure A to IO[A] flatMap or bind sequences two effects together
  • 29. Monads in Scala Implemented as a type class Achieves the same as in Haskell pure = put an A in a Monad flatMap = sequence two monads Effects in functional Programming - @justinhj (C)2019 B
  • 30. IO Monad - Future Future is not a Monad Future execution is eager http://justinhj.github.io/2018/05/05/hacker-news-api-4.html Effects in functional Programming - @justinhj (C)2019 Futures allow asynchronous effects They have pure and bind (Future.success and Future.flatMap)
  • 31. IO Monad - Future Effects in functional Programming - @justinhj (C)2019
  • 32. IO Monad - Future Future is not a Monad Future execution is eager http://justinhj.github.io/2018/05/05/hacker-news-api-4.html Effects in functional Programming - @justinhj (C)2019
  • 33. IO Monad - Scalaz Runar Bjarnason https://apocalisp.wordpress.com/2011/12/19/towards-an-effect-system-in-scala-part-2-io-monad/ Direct conversion from Haskell Effects in functional Programming - @justinhj (C)2019
  • 34. IO Monad - Monix (2.x series) Alex Nedelcuhttps://monix.io/docs/2x/eval/task.html#design-summary Effects in functional Programming - @justinhj (C)2019
  • 35. IO Monad - Cats Effect Effects in functional Programming - @justinhj (C)2019 Monix Task, Scalaz IO/Task became Cats Effect Includes cancelation, stack safe trampolining, parallel execution and a green threads system (fibres), Daniel Spiewak - The Making of an IO https://www.youtube.com/watch?v=g_jP47HFpWA
  • 36. IO Monad - Cats Effect Effects in functional Programming - @justinhj (C)2019
  • 37. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 http://degoes.net/articles/bifunctor-io IO[A] becomes IO[E, A]
  • 38. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019
  • 39. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 Brings errors to type level
  • 40. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 Brings errors to type level More efficient than a EitherT
  • 41. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 ZIO[R,E,A] http://degoes.net/articles/zio-environment
  • 42. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019
  • 43. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 Example ZIO program
  • 44. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 Sample environment module
  • 45. IO Monad - ZIO Effects in functional Programming - @justinhj (C)2019 Test module
  • 46. Thank you! Effects in functional Programming - @justinhj (C)2019 Questions?