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
Chapter 1. What is functional programming?
Chapter 1. A functional solution: removing the side effects
Chapter 1. Exactly what is a (pure) function?
Chapter 1. Referential transparency, purity, and the substitution model
Chapter 2. Getting started with functional programming in Scala
Chapter 2. Running our program
Chapter 2. Higher-order functions: passing functions to functions
Chapter 2. Polymorphic functions: abstracting over types
Chapter 2. Following types to implementations
Chapter 3. Functional data structures
Chapter 3. Pattern matching
Chapter 3. Data sharing in functional data structures
Chapter 3. Recursion over lists and generalizing to higher-order functions
Chapter 3. Trees
Chapter 4. Handling errors without exceptions
Chapter 4. Possible alternatives to exceptions
Chapter 4. The Option data type
Chapter 4. Option composition, lifting, and wrapping exception-oriented APIs
Chapter 4. The Either data type
Chapter 5. Strictness and laziness
Chapter 5. An extended example: lazy lists
Chapter 5. Separating program description from evaluation
Chapter 5. Infinite streams and corecursion
Chapter 6. Purely functional state
Chapter 6. Making stateful APIs pure
Chapter 6. A better API for state actions
Chapter 6. A general state action data type
Chapter 7. Purely functional parallelism
Chapter 7. A data type for parallel computations
Chapter 7. Combining parallel computations
Chapter 7. Explicit forking
Chapter 7. Picking a representation
Chapter 7. Refining the API
Chapter 7. The algebra of an API
Chapter 7. The law of forking
Chapter 7. A fully non-blocking Par implementation using actors
Chapter 7. Refining combinators to their most general form
Chapter 8. Property-based testing
Chapter 8. Choosing data types and functions
Chapter 8. The meaning and API of generators
Chapter 8. Test case minimization
Chapter 8. Using the library and improving its usability
Chapter 8. Testing higher-order functions and future directions
Chapter 9. Parser combinators
Chapter 9. Designing an algebra, first
Chapter 9. A possible algebra
Chapter 9. Handling context sensitivity
Chapter 9. Error reporting
Chapter 9. Controlling branching and backtracking
Chapter 9. Implementing the algebra
Chapter 9. Failover and backtracking
Chapter 10. Monoids
Chapter 10. Folding lists with monoids
Chapter 10. Example: Parallel parsing
Chapter 10. Foldable data structures
Chapter 11. Monads
Chapter 11. Monads: generalizing the flatMap and unit functions
Chapter 11. Monadic combinators
Chapter 11. Just what is a monad?
Chapter 11. The State monad and partial type application
Chapter 12. Applicative and traversable functors
Chapter 12. The difference between monads and applicative functors
Chapter 12. The advantages of applicative functors
Chapter 12. The applicative laws
Chapter 12. Traversable functors
Chapter 12. Uses of Traverse
Chapter 12. Traversal fusion
Chapter 13. External effects and I/O
Chapter 13. A simple IO type
Chapter 13. Benefits and drawbacks of the simple IO type
Chapter 13. Avoiding the StackOverflowError
Chapter 13. A more nuanced IO type
Chapter 13. Non-blocking and asynchronous I/O
Chapter 13. Why the IO type is insufficient for streaming I/O
Chapter 14. Local effects and mutable state
Chapter 14. A data type to enforce scoping of side effects
Chapter 14. Running mutable state actions
Chapter 14. Purity is contextual
Chapter 15. Stream processing and incremental I/O
Chapter 15. Simple stream transducers
Chapter 15. Composing and appending processes
Chapter 15. An extensible process type
Chapter 15. Ensuring resource safety
Chapter 15. Multiple input streams
Chapter 15. Applications