- [tiny-cps](#tiny-cps) - [CPS functions](#cps-functions) * [Why?](#why) * [Advanced composability](#advanced-composability) * [What is new here?](#what-is-new-here) + [Variadic input and output](#variadic-input-and-output) + [Full power of multiple outputs streams](#full-power-of-multiple-outputs-streams) + [Functional progamming paradigm](#functional-progamming-paradigm) + [Lazy or eager?](#lazy-or-eager) + [Differences with Haskell](#differences-with-haskell) + ["Do less" is a feature](#do-less-is-a-feature) * [Terminology](#terminology) * [Using CPS functions](#using-cps-functions) * [What about Callback Hell?](#what-about-callback-hell) * [Asynchronous iteration over array](#asynchronous-iteration-over-array) - [Examples of CPS functions](#examples-of-cps-functions) * [Promise producers](#promise-producers) * [Promises](#promises) * [Node API](#node-api) * [HTTP requests](#http-requests) * [Database Access](#database-access) * [Middleware e.g. in Express or Redux](#middleware-eg-in-express-or-redux) * [Web Sockets](#web-sockets) * [Stream libraries](#stream-libraries) + [Pull Streams](#pull-streams) + [Flyd](#flyd) * [Event aggregation](#event-aggregation) - [Comparison with Promises and Callbacks](#comparison-with-promises-and-callbacks) * [Returning results](#returning-results) * [Chaining](#chaining) * [Asynchronous composition](#asynchronous-composition) * [Error handling](#error-handling) * [Signatures](#signatures) * [Standardization](#standardization) - [Functional and Fluent API](#functional-and-fluent-api) * [Conventions](#conventions) * [CPS.map](#cpsmap) + [Mapping over single function](#mapping-over-single-function) + [Mapping over multiple functions](#mapping-over-multiple-functions) + [Map taking multiple arguments](#map-taking-multiple-arguments) + [Functor laws](#functor-laws) + [CPS.of](#cpsof) * [CPS.chain](#cpschain) + [Transforming multiple arguments into multiple arguments](#transforming-multiple-arguments-into-multiple-arguments) + [Why is it called `chain`?](#why-is-it-called-chain) + [Composing multiple outputs](#composing-multiple-outputs) + [Passing multiple CPS functions to `chain`](#passing-multiple-cps-functions-to-chain) + [Monadic laws](#monadic-laws) - [Associativity law](#associativity-law) - [Identity laws](#identity-laws) * [Application of `chain`: Turn Node API into Promise style callbacks](#application-of-chain-turn-node-api-into-promise-style-callbacks) * [CPS.ap](#cpsap) + [Running CPS functions in parallel](#running-cps-functions-in-parallel) + [Lifting functions of multiple parameters](#lifting-functions-of-multiple-parameters) - [Promise.all](#promiseall) - [Usage notes](#usage-notes) + [Applying multiple functions inside `ap`](#applying-multiple-functions-inside-ap) + [Applicative laws](#applicative-laws) * [CPS.merge](#cpsmerge) + [Relation with Promise.race](#relation-with-promiserace) + [Commutative Monoid](#commutative-monoid) * [CPS.filter](#cpsfilter) + [Filtering over multiple functions](#filtering-over-multiple-functions) + [Implementation via `chain`](#implementation-via-chain) * [CPS.scan](#cpsscan)