O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Functional Programming in Scala Video Edition

Video Description

"Leads to deep insights into the nature of computation."
From the Foreword by Martin Odersky, Creator of Scala

Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to the everyday business of coding. This Video Editions book guides readers from basic techniques to advanced topics in a logical, concise, and clear progression. In it, you'll find concrete examples that open up the world of functional programming.

Functional programming (FP) is a style of software development emphasizing functions that don't depend on program state. Functional code is easier to test and reuse, simpler to parallelize, and less prone to bugs than other code. Scala is an emerging JVM language that offers strong support for FP. Its familiar syntax and transparent interoperability with Java make Scala a great place to start learning FP.

Inside:
  • Functional programming concepts
  • The whys and hows of FP
  • How to write multicore programs
  • Checks for understanding
This title assumes no prior experience with functional programming. Some prior exposure to Scala or Java is helpful.

Paul Chiusano and Rúnar Bjarnason are recognized experts in functional programming with Scala and are core contributors to the Scalaz library.

The definitive guide to functional programming for Scala and Java 8 developers!
William E. Wheeler, TekSystems

Shows you the approach and mindset to raise your Scala way beyond 'a better Java'.
Fernando Dobladez, Code54

NARRATED BY MARK THOMAS

Table of Contents

  1. Chapter 1. What is functional programming? 00:07:51
  2. Chapter 1. A functional solution: removing the side effects 00:06:08
  3. Chapter 1. Exactly what is a (pure) function? 00:04:48
  4. Chapter 1. Referential transparency, purity, and the substitution model 00:08:35
  5. Chapter 2. Getting started with functional programming in Scala 00:09:26
  6. Chapter 2. Running our program 00:06:04
  7. Chapter 2. Higher-order functions: passing functions to functions 00:07:29
  8. Chapter 2. Polymorphic functions: abstracting over types 00:07:42
  9. Chapter 2. Following types to implementations 00:07:47
  10. Chapter 3. Functional data structures 00:08:54
  11. Chapter 3. Pattern matching 00:07:19
  12. Chapter 3. Data sharing in functional data structures 00:06:33
  13. Chapter 3. Recursion over lists and generalizing to higher-order functions 00:07:49
  14. Chapter 3. Trees 00:04:12
  15. Chapter 4. Handling errors without exceptions 00:06:13
  16. Chapter 4. Possible alternatives to exceptions 00:04:09
  17. Chapter 4. The Option data type 00:08:40
  18. Chapter 4. Option composition, lifting, and wrapping exception-oriented APIs 00:06:35
  19. Chapter 4. The Either data type 00:05:27
  20. Chapter 5. Strictness and laziness 00:10:53
  21. Chapter 5. An extended example: lazy lists 00:04:04
  22. Chapter 5. Separating program description from evaluation 00:06:44
  23. Chapter 5. Infinite streams and corecursion 00:05:03
  24. Chapter 6. Purely functional state 00:06:48
  25. Chapter 6. Making stateful APIs pure 00:03:22
  26. Chapter 6. A better API for state actions 00:06:38
  27. Chapter 6. A general state action data type 00:06:32
  28. Chapter 7. Purely functional parallelism 00:07:12
  29. Chapter 7. A data type for parallel computations 00:07:20
  30. Chapter 7. Combining parallel computations 00:04:05
  31. Chapter 7. Explicit forking 00:07:01
  32. Chapter 7. Picking a representation 00:03:02
  33. Chapter 7. Refining the API 00:08:54
  34. Chapter 7. The algebra of an API 00:07:55
  35. Chapter 7. The law of forking 00:06:53
  36. Chapter 7. A fully non-blocking Par implementation using actors 00:11:03
  37. Chapter 7. Refining combinators to their most general form 00:09:17
  38. Chapter 8. Property-based testing 00:06:33
  39. Chapter 8. Choosing data types and functions 00:09:18
  40. Chapter 8. The meaning and API of generators 00:07:17
  41. Chapter 8. Test case minimization 00:03:38
  42. Chapter 8. Using the library and improving its usability 00:10:23
  43. Chapter 8. Testing higher-order functions and future directions 00:06:00
  44. Chapter 9. Parser combinators 00:03:38
  45. Chapter 9. Designing an algebra, first 00:14:19
  46. Chapter 9. A possible algebra 00:09:03
  47. Chapter 9. Handling context sensitivity 00:07:58
  48. Chapter 9. Error reporting 00:07:37
  49. Chapter 9. Controlling branching and backtracking 00:04:18
  50. Chapter 9. Implementing the algebra 00:06:42
  51. Chapter 9. Failover and backtracking 00:04:23
  52. Chapter 10. Monoids 00:07:01
  53. Chapter 10. Folding lists with monoids 00:03:49
  54. Chapter 10. Example: Parallel parsing 00:05:20
  55. Chapter 10. Foldable data structures 00:05:31
  56. Chapter 11. Monads 00:08:39
  57. Chapter 11. Monads: generalizing the flatMap and unit functions 00:06:26
  58. Chapter 11. Monadic combinators 00:07:47
  59. Chapter 11. Just what is a monad? 00:04:43
  60. Chapter 11. The State monad and partial type application 00:07:29
  61. Chapter 12. Applicative and traversable functors 00:03:59
  62. Chapter 12. The difference between monads and applicative functors 00:06:20
  63. Chapter 12. The advantages of applicative functors 00:05:12
  64. Chapter 12. The applicative laws 00:05:42
  65. Chapter 12. Traversable functors 00:03:57
  66. Chapter 12. Uses of Traverse 00:06:46
  67. Chapter 12. Traversal fusion 00:05:44
  68. Chapter 13. External effects and I/O 00:04:59
  69. Chapter 13. A simple IO type 00:08:48
  70. Chapter 13. Benefits and drawbacks of the simple IO type 00:03:48
  71. Chapter 13. Avoiding the StackOverflowError 00:09:35
  72. Chapter 13. A more nuanced IO type 00:04:31
  73. Chapter 13. Non-blocking and asynchronous I/O 00:06:51
  74. Chapter 13. Why the IO type is insufficient for streaming I/O 00:05:36
  75. Chapter 14. Local effects and mutable state 00:03:55
  76. Chapter 14. A data type to enforce scoping of side effects 00:08:59
  77. Chapter 14. Running mutable state actions 00:09:35
  78. Chapter 14. Purity is contextual 00:09:38
  79. Chapter 15. Stream processing and incremental I/O 00:09:46
  80. Chapter 15. Simple stream transducers 00:06:45
  81. Chapter 15. Composing and appending processes 00:04:31
  82. Chapter 15. An extensible process type 00:07:49
  83. Chapter 15. Ensuring resource safety 00:10:00
  84. Chapter 15. Multiple input streams 00:09:01
  85. Chapter 15. Applications 00:03:46