Skip to content
Giulio Canti edited this page Sep 2, 2022 · 13 revisions

Modules

FAQ

How to choose an effect for my app?

Here's a table containing the basic effects

Type constructor Effect (interpretation)
ReadonlyArray<A> a non deterministic computation
Option<A> a computation that may fail
Either<E, A> a computation that may fail and yield an error
IO<A> a synchronous computation that never fails
Task<A> an asynchronous computation that never fails
Reader<R, A> reading from an environment (dependency injection)
State<S, A> stateful computation

These basic effects are like ingredients for a recipe.

In order to get your recipe (the effect of your app) you can add all the ingredients you need by nesting the corresponding type constructors.

Example

Let's say your app

  • will make use of dependency injection
  • will run in an asynchronous context
  • will handle operations which may fail

Here's the corresponding ingredients

  • Reader
  • Task
  • Either

in order to mix the ingredients you just nest the type constructors

import { Reader } from 'fp-ts/Reader'
import { Task } from 'fp-ts/Task'
import { Either } from 'fp-ts/Either'

type MyEffect<R, E, A> = Reader<R, Task<Either<E, A>>>

These three ingredients are so common that fp-ts exports a ready-to-use module, the ReaderTaskEither module.

Clone this wiki locally