https://github.com/fluture-js/fluenture
Bring back Fluture's fluent method API
https://github.com/fluture-js/fluenture
fluent fluture
Last synced: 11 months ago
JSON representation
Bring back Fluture's fluent method API
- Host: GitHub
- URL: https://github.com/fluture-js/fluenture
- Owner: fluture-js
- License: mit
- Created: 2019-06-07T09:42:12.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2021-04-06T12:11:40.000Z (about 5 years ago)
- Last Synced: 2025-07-14T11:06:30.026Z (11 months ago)
- Topics: fluent, fluture
- Language: JavaScript
- Size: 71.3 KB
- Stars: 3
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
# Fluenture
Brings back [Fluture][]'s fluent method API, for the nostalgic developer.
## Usage
### Node
```console
$ 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:
- [Skypack](https://cdn.skypack.dev/fluenture@3.1.0)
- [JSPM](https://jspm.dev/fluenture@3.1.0)
- [jsDelivr](https://cdn.jsdelivr.net/npm/fluenture@3.1.0/+esm)
### 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
```js
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`](#fluent), so as to keep the fluent
method chain intact.
Fluent [`pipe`](https://github.com/fluture-js/Fluture#pipe).
#### `alt :: Fluenture a b ~> Future a b -> Fluenture a b`
Fluent [`alt`](https://github.com/fluture-js/Fluture#alt).
#### `and :: Fluenture a b ~> Future a b -> Fluenture a b`
Fluent [`and`](https://github.com/fluture-js/Fluture#and).
#### `ap :: Fluenture a b ~> Future a (b -> c) -> Fluenture a c`
Fluent [`ap`](https://github.com/fluture-js/Fluture#ap).
#### `bichain :: Fluenture a b ~> (a -> Fluenture a c, b -> Fluenture a c) -> Fluenture a c`
Fluent [`bichain`](https://github.com/fluture-js/Fluture#bichain).
#### `bimap :: Fluenture a b ~> (a -> c, b -> d) -> Fluenture c d`
Fluent [`bimap`](https://github.com/fluture-js/Fluture#bimap).
#### `both :: Fluenture a b ~> Future a c -> Fluenture a (Pair b c)`
Fluent [`both`](https://github.com/fluture-js/Fluture#both).
#### `cache :: Fluenture a b ~> () -> Fluenture a b`
Fluent [`cache`](https://github.com/fluture-js/Fluture#cache).
#### `chain :: Fluenture a b ~> (b -> Fluenture a c) -> Fluenture a c`
Fluent [`chain`](https://github.com/fluture-js/Fluture#chain).
#### `chainRej :: Fluenture a b ~> (a -> Fluenture c b) -> Fluenture c b`
Fluent [`chainRej`](https://github.com/fluture-js/Fluture#chainRej).
#### `coalesce :: Fluenture a b ~> (a -> c, b -> c) -> Fluenture d c`
Fluent [`coalesce`](https://github.com/fluture-js/Fluture#coalesce).
#### `lastly :: Fluenture a b ~> Future a c -> Fluenture a b`
Fluent [`lastly`](https://github.com/fluture-js/Fluture#lastly).
#### `map :: Fluenture a b ~> (b -> c) -> Fluenture a c`
Fluent [`map`](https://github.com/fluture-js/Fluture#map).
#### `mapRej :: Fluenture a b ~> (a -> c) -> Fluenture c b`
Fluent [`mapRej`](https://github.com/fluture-js/Fluture#mapRej).
#### `pap :: Fluenture a b ~> Fluenture a (b -> c) -> Fluenture a c`
Fluent [`pap`](https://github.com/fluture-js/Fluture/#pap).
#### `race :: Fluenture a b ~> Future a b -> Fluenture a b`
Fluent [`race`](https://github.com/fluture-js/Fluture#race).
#### `swap :: Fluenture a b ~> () -> Fluenture b a`
Fluent [`swap`](https://github.com/fluture-js/Fluture#swap).
#### `done :: Fluenture a b ~> (b -> c) -> Cancel`
Fluent [`done`](https://github.com/fluture-js/Fluture#done).
#### `fork :: Fluenture a b ~> (a -> c, b -> d) -> Cancel`
Fluent [`fork`](https://github.com/fluture-js/Fluture#fork).
#### `forkCatch :: Fluenture a b ~> (Error -> c, a -> d, b -> e) -> Cancel`
Fluent [`forkCatch`](https://github.com/fluture-js/Fluture#forkCatch).
#### `promise :: Fluenture Error a ~> () -> Promise Error a`
Fluent [`promise`](https://github.com/fluture-js/Fluture#promise).
#### `value :: Fluenture a b ~> ((Nullable a, b) -> c) -> Cancel`
Fluent [`value`](https://github.com/fluture-js/Fluture#value).
[Fluture]: https://github.com/fluture-js/Fluture
[esm]: https://github.com/standard-things/esm
[UMD]: https://github.com/umdjs/umd