Bring back Fluture's fluent method API

Usage no npm install needed!

<script type="module">
  import fluenture from 'https://cdn.skypack.dev/fluenture';



Brings back Fluture's fluent method API, for the nostalgic developer.



$ 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)


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.