/** * Functor * * 1. u.map(a => a) is equivalent to u (identity) * 2. u.map(x => f(g(x))) is equivalent to u.map(g).map(f) (composition) * * map :: Functor f => f a ~> (a -> b) -> f b */ import { HKT, KindOf, URIS } from './HKT'; export interface Functor { readonly URI: F; readonly map: (ma: HKT, f: (a: A) => B) => HKT; } export interface Functor1 { readonly URI: F; readonly map: (ma: KindOf, f: (a: A) => B) => KindOf; } export interface Functor2 { readonly URI: F; readonly map: (ma: KindOf, f: (a: A) => B) => KindOf; }