Fluenture
Brings back Fluture's fluent method API, for the nostalgic developer.
Usage
Node
$ npm install --save fluenture
On Node 12 and up, this module can be loaded directly with import
or
require
. On Node versions below 12, require
or the esm-loader can
be used.
Deno and Modern Browsers
You can load the EcmaScript module from various content delivery networks:
Old Browsers and Code Pens
There's a UMD file included in the NPM package, also available via jsDelivr: https://cdn.jsdelivr.net/npm/fluenture@3.1.0/dist/umd.js
This file adds fluenture
to the global scope, or use CommonJS/AMD
when available.
Usage Example
import {resolve, reject} from 'fluture';
import {fluent} from 'fluenture';
fluent (resolve (42))
.map (x => x / 2)
.chain (x => reject (x + 21))
.swap ()
.fork (console.error, console.log)
API
We're using the Fluenture a b
type here to denote instances of Future
that were enhanced with a fluent method API. One can think of the
Fluenture
type as a subtype of Future
: any instances of it are also
instances of Future
.
fluent :: Future a b -> Fluenture a b
Enhance a Future with the fluent method API.
This function is idempotent.
functional :: Future a b -> Future a b
Strip a fluent Future (or "Fluenture") from its method API.
This function is idempotent.
pipe :: (Future a b -> c) -> c
This function is equivalent to Fluture's built-in pipe
function, with
once exception; If a Future is returned from the given function, it is
automatically wrapped using fluent
, so as to keep the fluent
method chain intact.
Fluent pipe
.
alt :: Fluenture a b ~> Future a b -> Fluenture a b
Fluent alt
.
and :: Fluenture a b ~> Future a b -> Fluenture a b
Fluent and
.
ap :: Fluenture a b ~> Future a (b -> c) -> Fluenture a c
Fluent ap
.
bichain :: Fluenture a b ~> (a -> Fluenture a c, b -> Fluenture a c) -> Fluenture a c
Fluent bichain
.
bimap :: Fluenture a b ~> (a -> c, b -> d) -> Fluenture c d
Fluent bimap
.
both :: Fluenture a b ~> Future a c -> Fluenture a (Pair b c)
Fluent both
.
cache :: Fluenture a b ~> () -> Fluenture a b
Fluent cache
.
chain :: Fluenture a b ~> (b -> Fluenture a c) -> Fluenture a c
Fluent chain
.
chainRej :: Fluenture a b ~> (a -> Fluenture c b) -> Fluenture c b
Fluent chainRej
.
coalesce :: Fluenture a b ~> (a -> c, b -> c) -> Fluenture d c
Fluent coalesce
.
lastly :: Fluenture a b ~> Future a c -> Fluenture a b
Fluent lastly
.
map :: Fluenture a b ~> (b -> c) -> Fluenture a c
Fluent map
.
mapRej :: Fluenture a b ~> (a -> c) -> Fluenture c b
Fluent mapRej
.
pap :: Fluenture a b ~> Fluenture a (b -> c) -> Fluenture a c
Fluent pap
.
race :: Fluenture a b ~> Future a b -> Fluenture a b
Fluent race
.
swap :: Fluenture a b ~> () -> Fluenture b a
Fluent swap
.
done :: Fluenture a b ~> (b -> c) -> Cancel
Fluent done
.
fork :: Fluenture a b ~> (a -> c, b -> d) -> Cancel
Fluent fork
.
forkCatch :: Fluenture a b ~> (Error -> c, a -> d, b -> e) -> Cancel
Fluent forkCatch
.
promise :: Fluenture Error a ~> () -> Promise Error a
Fluent promise
.
value :: Fluenture a b ~> ((Nullable a, b) -> c) -> Cancel
Fluent value
.