From a25586b8f36ad85f6d94f659a49b568bf18b8f93 Mon Sep 17 00:00:00 2001 From: James Brock Date: Wed, 29 Jun 2022 23:53:50 +0900 Subject: [PATCH 1/2] Update README.md --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index a62b9fc..376301e 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,20 @@ 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 AJAX 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. `Effect` is in the core libraries instead of `Aff` for two reasons. + +1. The implementation of `Effect` is much simpler than `Aff`, which makes a big difference for non-JavaScript backends. +2. `Effect` is much faster than `Aff`, and we expect most effects to complete synchronously, so usually `Effect` will suffice. + +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: From 48e4af8a1edd06c81bcee434b15a1fd484730398 Mon Sep 17 00:00:00 2001 From: James Brock Date: Mon, 4 Jul 2022 11:11:59 +0900 Subject: [PATCH 2/2] Update README.md --- README.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 376301e..863e7d6 100644 --- a/README.md +++ b/README.md @@ -30,13 +30,10 @@ main = launchAff_ do `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 AJAX requests, timeouts, and network and file IO. +`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. `Effect` is in the core libraries instead of `Aff` for two reasons. - -1. The implementation of `Effect` is much simpler than `Aff`, which makes a big difference for non-JavaScript backends. -2. `Effect` is much faster than `Aff`, and we expect most effects to complete synchronously, so usually `Effect` will suffice. +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.