import type * as P from "@principia/prelude"; import * as HKT from "@principia/prelude/HKT"; import { identity } from "../Function"; import { Functor } from "./functor"; import type { Identity, URI, V } from "./model"; /* * ------------------------------------------- * Comonad Identity * ------------------------------------------- */ export const extend_ = (wa: A, f: (wa: A) => B): B => f(wa); export const extend = (f: (wa: A) => B) => (wa: A): B => f(wa); export const extract: (wa: A) => A = identity; export const duplicate: (wa: Identity) => Identity> = extend(identity); export const Comonad: P.Comonad<[URI], V> = HKT.instance({ ...Functor, extend, extract });