All Projects → fp-tower → Foundations

fp-tower / Foundations

Licence: cc-by-sa-4.0
Foundations of Functional Programming in Scala is a comprehensive, self-paced online course with no prerequisites, which helps you to become a confident, productive, and powerful functional Scala developer.

Programming Languages

scala
5932 projects

Projects that are alternatives of or similar to Foundations

Vertx Zero
Zero Framework:http://www.vertxup.cn
Stars: ✭ 320 (-12.57%)
Mutual labels:  functional-programming
Tsec
Type-safe general-cryptography library - https://jmcardon.github.io/tsec/
Stars: ✭ 338 (-7.65%)
Mutual labels:  functional-programming
Swift Validated
🛂 A result type that accumulates multiple errors.
Stars: ✭ 350 (-4.37%)
Mutual labels:  functional-programming
Here Be Dragons
An Intellij/Android Studio plugin to help visualise side effects in your code.
Stars: ✭ 325 (-11.2%)
Mutual labels:  functional-programming
Gubrak
⚙️ Golang functional utility library with syntactic sugar. It's like lodash, but for Go
Stars: ✭ 329 (-10.11%)
Mutual labels:  functional-programming
Hazel
Hazel, a live functional programming environment with typed holes
Stars: ✭ 340 (-7.1%)
Mutual labels:  functional-programming
Lambda Talk
A Flock of Functions: Combinators, Lambda Calculus, & Church Encodings in JS
Stars: ✭ 315 (-13.93%)
Mutual labels:  functional-programming
True Myth
A library for safer and smarter error- and "nothing"-handling in TypeScript.
Stars: ✭ 360 (-1.64%)
Mutual labels:  functional-programming
Rxswift
RxSwift를 스터디하는 공간
Stars: ✭ 335 (-8.47%)
Mutual labels:  functional-programming
Swift Prelude
🎶 A collection of types and functions that enhance the Swift language.
Stars: ✭ 349 (-4.64%)
Mutual labels:  functional-programming
Magic In Ten Mins
十分钟魔法练习
Stars: ✭ 327 (-10.66%)
Mutual labels:  functional-programming
Underscore Java
java port of Underscore.js
Stars: ✭ 327 (-10.66%)
Mutual labels:  functional-programming
Scriptum
A fool's scriptum on functional programming
Stars: ✭ 346 (-5.46%)
Mutual labels:  functional-programming
Effect
effect isolation in Python, to facilitate more purely functional code
Stars: ✭ 324 (-11.48%)
Mutual labels:  functional-programming
Qo
Qo - Query Object - Pattern matching and fluent querying in Ruby
Stars: ✭ 351 (-4.1%)
Mutual labels:  functional-programming
Monio
Async-capable IO monad for JS
Stars: ✭ 311 (-15.03%)
Mutual labels:  functional-programming
Scala typeclassopedia
Abstractions and constructions from math (Category theory, Abstract algebra) implementations in Scala, minimal description, links to good explanations, links to implementations in other FP languages: Haskell, Idris, Purescript, non FP too: Java, C++ and to formalizations in proof assistants: Coq (UniMath, HoTT book), Cubical Agda.
Stars: ✭ 338 (-7.65%)
Mutual labels:  functional-programming
Fun Task
Abstraction for managing asynchronous code in JS
Stars: ✭ 363 (-0.82%)
Mutual labels:  functional-programming
Language Ext
C# functional language extensions - a base class library for functional programming
Stars: ✭ 3,964 (+983.06%)
Mutual labels:  functional-programming
Functionaltabledata
Declarative UITableViewDataSource implementation
Stars: ✭ 347 (-5.19%)
Mutual labels:  functional-programming

FP Foundation Logo

Foundation of Functional Programming in Scala is a comprehensive, self-paced online course with no prerequisites, which helps you to become a confident, productive, and powerful functional Scala developer.

Requirements

Some basic understanding of Scala syntax.

Course Synopsis

1. Value functions

In this section, we'll do a deep dive into the different types of functions available in Scala. We’ll discuss what the difference is between them and when we should use each one.

Objectives

  • Learn the difference between methods and lambdas
  • Learn to generalise a common pattern with a higher-order function
  • Discover property-based testing and common testing techniques
  • Learn the various syntaxes for functions including the use of _ (the underscore character)

Slides

  1. Val vs Def functions
  2. Function as inputs

2. Generic functions

In Scala, we make functions and data types generic by adding type parameters. This simple technique has a tremendous impact on the design of functional APIs and we'll use it extensively throughout the course. In this section, we will learn how to read and implement interfaces using generic types as well as how to avoid the common pitfalls related to type parameters.

Objectives

  • Use type parameters to write fewer and more efficient tests
  • Understand why we shouldn't pattern match on a generic value
  • Practice working with Scala type inference
  • Learn how to use triple question marks and type parameters to guide the implementation of functions
  • Practice the design of functional APIs
  • Learn how to create and use custom random generators for property-based testing

Slides

  1. Generic functions - part 1
  2. Generic functions - part 2

3. Parallel data processing

Modern applications need to process more and more data in a short amount of time, which has led to the creation of technologies such as MapReduce, Spark and Kafka. In this section, we will cover the fundamentals of parallel data processing and learn why functional programming is such a good fit for it. We'll conclude this module with the analysis of a real-world dataset on global average temperature.

Objectives

  • Learn how to use generic types and property-based testing to explore a problem
  • Understand the risks of recursive functions
  • Familiarise yourself with foldLeft, foldMap and Monoids
  • Identify the difference between parallel and concurrent programs
  • Work with Future from the Scala standard library

Slides

  1. Introduction
  2. Iteration with for loops
  3. Recursions
  4. Analysis of global temperature - part 1
  5. Analysis of global temperature - part 2
  6. Analysis of global temperature - part 3
  7. Analysis of global temperature - part 4

4. What is functional programming?

What is functional programming all about? What is the single most important idea behind it? What are its limitations? And why isn't it more popular? You will get the answers to all these questions and much more in this module.

Objectives

  • Learn how functional programming helps us write better programs
  • Familiarise yourself with the limitations of FP and how to work around some of them such as shared mutable state and exceptions

Slides

  1. FP functions
  2. Refactoring
  3. Complexity
  4. null
  5. Reflection & pattern matching
  6. Conclusion

5. Actions

In the previous section, we will have learned that functional programming is quite restrictive. For example, we cannot perform actions like sending an email or updating a record in a database. Yet, we need to perform these actions almost daily in our real-world applications. In this section, we will discuss the workarounds functional programmers use to interact with the outside world while respecting functional programming principles. In particular, we will implement a simple IO data type that supports powerful retry strategies and concurrency primitives.

Objectives

  • Learn how to perform actions without breaking functional programming principles
  • Understand the difference between lazy and strict evaluations
  • Discover why Futures are not suitable for actions
  • Learn how to extend an API using algebra and interpreters

6. Error Handling

There are many ways to deal with runtime errors. The easiest and most common method consists of throwing exceptions. Unfortunately, this is incompatible with the functional programming paradigm. In this module, we will look at the problems caused by exceptions, and the ways in which we can safely deal with errors in Scala.

Objectives

  • Learn about Option and Either data types and when to use them
  • Discover variance and how it can help type inference
  • Practice how to combine actions (IO) and error handling (Option/Either)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].