Fantasy Land Monad and Alternative instances for return values from Fluture's hook.
$ npm install --save fluture-hooksOn 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.
You can load the EcmaScript module from various content delivery networks:
There's a UMD file included in the NPM package, also available via jsDelivr: https://cdn.jsdelivr.net/npm/[email protected]/dist/umd.js
This file adds flutureHooks to the global scope, or use CommonJS/AMD when available.
import{Future,node,fork}from'fluture/index.js';import{hook,hookAll,runHook}from'fluture-hooks/index.js';constacquirePostgres=(node(done=>require('imaginary-postgres').connect(done)));constacquireRedis=(node(done=>require('imaginary-redis').connect(done)));constcloseConnection=connection=>(node(done=>connection.end(done)));constpostgresHook=hook(acquirePostgres)(closeConnection);constredisHook=hook(acquireRedis)(closeConnection);constservicesHook=hookAll([postgresHook,redisHook]);constwithServices=runHook(servicesHook);fork(console.error)(console.log)(withServices(([postgres,redis])=>Future((rej,res)=>{/* consume postgres and redis */})));Tags a function awaiting a callback (such as the value returned by Fluture's hook) as a "Hook".
Hook a has Monad instance with sequential behaviour in its Applicative.
Hook(Future.hook(myResourceAcquisition)(myResourceDisposal));hook (m) (f) is the equivalent of Hook (Future.hook (m) (f)).
Creates a Hook without the need for a disposal function.
Given a Hook and a callback, runs the Hook, returning the callbacks' return value. For Hooks created from Fluture's hook, this means a Future is retured.
This function can also be thought of as "untagging" a Hook: runHook (Hook (h)) = h.
Construct a ParallelHook using a Hook.
ParallelHook a has a Functor instance, and ParallelHook (Future a b) has an Applicative instance with parallel behaviour.
Converts a ParallelHook to a normal Hook.
Combines resources from many hooks into a single hook in parallel, given that the eventual consumption of this new hook will return a Future.
hookAll (hooks) is the equivalent of sequential (sequence (ParallelHook) (map (ParallelHook) (hooks))) for all hooks :: Array (Hook (Future a b) c).