/** * Bifunctor * * 1. p.bimap(a => a, b => b) is equivalent to p (identity) * 2. p.bimap(a => f(g(a)), b => h(i(b)) is equivalent to p.bimap(g, i).bimap(f, h) (composition) * * bimap :: Bifunctor f => f a c ~> (a -> b, c -> d) -> f b d */ import { Functor2 } from './Functor'; import { KindOf, URIS } from './HKT'; export interface Bifunctor2 extends Functor2 { readonly bimap: (fea: KindOf, f: (e: E) => G, g: (a: A) => B) => KindOf; }