UNPKG

@dillonkearns/elm-graphql

Version:

<img src="https://cdn.jsdelivr.net/gh/martimatix/logo-graphqelm/logo.svg" alt="dillonearns/elm-graphql logo" width="40%" align="right">

21 lines (18 loc) 527 B
// @flow import { HKT } from './HKT' import type { Apply } from './Apply' export interface Chain<F> extends Apply<F> { chain<A, B>(f: (a: A) => HKT<F, B>, fa: HKT<F, A>): HKT<F, B> } // Forwards Kleisli composition. // // For example: // // ```js // import * as arr from '../Arr' // // const second = a => composeKleisli(maybe, arr.tail, arr.head) // ``` export function composeKleisli<F, A, B, C>(chain: Chain<F>, f: (a: A) => HKT<F, B>, g: (b: B) => HKT<F, C>): (a: A) => HKT<F, C> { return a => chain.chain(g, f(a)) }