export default {} /** * @template T, R * @typedef {(value: T) => R} Morphism */ /** * @template T * @typedef {(value: T) => R} InferredMorphism */ /** * @template T * @typedef {(value: T) => boolean} Predicate */ /** * @template T * @typedef {{ equals: (b: Setoid) => boolean * }} Setoid */ /** * @template T * @typedef {{ lte: (b: Ord) => boolean * }} Ord */ /** * @template T, U * @typedef {*} Semigroupoid */ /** * @template I, J * @typedef {{ compose: (b: Semigroupoid) => Semigroupoid * }} Category */ /** * @template T, U * @template {Category} M * @typedef {{ id: () => (value: T) => M * }} CategoryTypeRef */ /** * @template T * @typedef {{ concat: (b: Semigroup) => Semigroup * }} Semigroup */ /** * @template T * @typedef{Semigroup} Monoid */ /** * @template T * @template {Monoid} M * @typedef {{ empty: () => M * }} MonoidTypeRef */ /** * @template T * @typedef { Monoid & { invert: () => Group } * } Group */ /** * @template T * @typedef {{ filter: (f: (acc: U, val: T) => U, init: U) => U * }} Filterable */ /** * @template T * @typedef {{ map: (f: Morphism) => Functor * }} Functor */ /** * @template T * @typedef {{ contramap: (f: Morphism) => Contravariant * }} Contravariant */ /** * @template T * @typedef {{ ap: (f: Apply>) => Apply * }} Apply */ /** * @template T * @typedef {{ ap: (b: Applicative>) => Applicative, map: (f: Morphism) => Applicative * }} Applicative */ /** * @template T * @template {Applicative} M * @typedef {{ of: (value: T) => M * }} ApplicativeTypeRef */ /** * @template T * @typedef { Functor & { alt: (b: Alt) => Alt } * } Alt */ /** * @template T * @typedef {Alt} Plus */ /** * @template T * @template {Plus} M * @typedef { Alt & { zero: () => M } * } PlusTypeRef */ /** * @template T * @typedef {Applicative & Plus} Alternative */ /** * @template T * @template {Applicative & Plus} M * @typedef {ApplicativeTypeRef & PlusTypeRef} AlternativeTypeRef */ /** * @template T * @typedef {{ filter: (f: (acc: U, val: T) => U, init: U) => U * }} Foldable */ /** * @template T * @typedef { Functor & Foldable & { traverse: (A: ApplicativeTypeRef>, f: (val: T) => Applicative) => Applicative> } * } Traversable */ /** * @template T * @typedef { Apply & { chain: (f: (value: T) => Chain) => Chain } * } Chain */ /** * @template T * @typedef {Chain} ChainRec */ /** * @template T * @typedef {Functor & Applicative & Chain} Monad */ /** * @template T * @template {Monad} M * @typedef {ApplicativeTypeRef} MonadTypeDef */ /** * @template T * @typedef { Functor & { extend: (f: (val: Extend) => U) => Extend} * } Extend */ /** * @template T * @typedef { Extend & { extract: () => T } * } Comonad */ /** @typedef {(...args: any[]) => any} Fn */