/** * Comonad * * 1. w.extend(_w => _w.extract()) is equivalent to w (left identity) * 2. w.extend(f).extract() is equivalent to f(w) (right identity) * * extract :: Comonad w => w a ~> () -> a */ import { Extend, Extend1, Extend2 } from './Extend'; import { HKT, KindOf, URIS } from './HKT'; export interface Comonad extends Extend { readonly extract: (ma: HKT) => A; } export interface Comonad1 extends Extend1 { readonly extract: (ma: KindOf) => A; } export interface Comonad2 extends Extend2 { readonly extract: (ma: KindOf) => E | A; }