Skip to content

Latest commit

 

History

History
61 lines (38 loc) · 3.4 KB

README.md

File metadata and controls

61 lines (38 loc) · 3.4 KB

Aff

CI Release Pursuit Maintainer: natefaubion

An asynchronous effect monad and threading model for PureScript.

Installation

Install aff with Spago:

spago install aff

Quick start

This quick start covers common, minimal use cases for the library. Longer examples and tutorials can be found in the docs directory.

main :: Effect Unit
main = launchAff_ do
  response <- Ajax.get "http://foo.bar"
  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

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:

  1. Module documentation is published on Pursuit.
  2. Written documentation is kept in the docs directory.
  3. Usage examples can be found in the test suite.

If you get stuck, there are several ways to get help:

Contributing

You can contribute to aff in several ways:

  1. If you encounter a problem or have a question, please open an issue. We'll do our best to work with you to resolve or answer it.

  2. If you would like to contribute code, tests, or documentation, please read the contributor guide. It's a short, helpful introduction to contributing to this library, including development instructions.

  3. If you have written a library, tutorial, guide, or other resource based on this package, please share it on the PureScript Discourse! Writing libraries and learning resources are a great way to help this library succeed.