diff --git a/README.md b/README.md index a62b9fc..863e7d6 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,17 @@ main = launchAff_ do log response.body ``` +## Effect and Aff + +`Effect` is a synchronous effect monad. It is used to sequence effectful foreign (JavaScript) code — things like random number generation, reading and writing mutable values, writing to the console and throwing and catching exceptions.[1](https://stackoverflow.com/questions/37661391/what-are-eff-and-aff) + +`Aff` is an asynchronous effect monad. It can handle and sequence effectful asynchronous code, like HTTP requests, timeouts, and network and file IO. +It also provides a nice mechanism for handling errors. + +Furthermore, `Aff` can perform synchronous effects by using `liftEffect`. In other words, `Effect` is a special case of `Aff`, for the special case that we expect the effect to complete immediately. + +Many I/O-related packages in the PureScript ecosystem provide both an asynchronous callback-based `Effect` API and an `Aff` API for the same feature. When you encounter this, you should almost always prefer the `Aff` API. You will find the `Aff` API is much simpler to use correctly. + ## Documentation `aff` documentation is stored in a few places: