import type { ExtendMin } from './Extend' import { Extend } from './Extend' import * as HKT from './HKT' export interface Comonad extends Extend { readonly extract: ExtractFn } export type ComonadMin = ExtendMin & { readonly extract: ExtractFn } export function Comonad(F: ComonadMin): Comonad { return HKT.instance({ ...Extend(F), extract: F.extract }) } export interface ExtractFn { (wa: HKT.Kind): A } export interface DuplicateFn { (wa: HKT.Kind): HKT.Kind< F, C, N, K, Q, W, X, I, S, R, E, HKT.Kind > }