New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

concurrify

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

concurrify

Turn non-concurrent FantasyLand Applicatives concurrent

1.0.2
Source
npm
Version published
Weekly downloads
22K
-9.28%
Maintainers
1
Weekly downloads
 
Created
Source

Concurrify

Chat NPM Version Dependencies Build Status Code Coverage

Turn non-concurrent FantasyLand 3 Applicatives concurrent.

Most time-dependent applicatives are very useful as Monads, because it gives them the ability to run sequentially, where each step depends on the previous. However, they lose the ability to run concurrently. This library allows one to wrap a Monad (with sequential ap) in an Alternative (with parallel ap).

Usage

//The concurrify function takes four arguments, explained below.
const concurrify = require('concurrify');

//We load the Type Representative of the Applicative we want to transform.
const Future = require('fluture');

//We create a "zero" instance and an "alt" function for "Alternative".
const zero = Future(() => {});
const alt = Future.race;

//We create an override "ap" function that runs the Applicatives concurrently.
const ap = (mx, mf) => Future.both(mx, mf).map(([x, f]) => f(x));

//Calling concurrify with these arguments gives us a new Type Representative.
const ConcurrentFuture = concurrify(Future, zero, alt, ap);

//We can use our type as such:
ConcurrentFuture(Future.of(1)).sequential.fork(console.error, console.log);

API

concurrify :: (Applicative f, Alternative (m f))
           => (TypeRep f, f a, (f a, f a) -> f a, (f a, f (a -> b)) -> f b)
           -> f c
           -> m f c

Interoperability

  • Implements FantasyLand 3 Alternative (of, zero, map, ap, alt).
  • Instances can be identified by, and are compared using, Sanctuary Type Identifiers.

Keywords

algebraic

FAQs

Package last updated on 28 Dec 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts