@typed-f/functor
Version:
[![NPM Version][functor-npm-version-badge]][functor-npm] [repo-circleci-badge]: https://img.shields.io/circleci/project/github/Ailrun/typed-f/master.svg?logo=circleci [![Known Vulnerabilities][functor-snyk-badge]][functor-snyk] [![Supported TypeScript Ver
33 lines (32 loc) • 1.48 kB
TypeScript
import { Fun } from '@typed-f/function';
import * as T from '@typed-f/tagged';
interface FunctorBuilder<MapType> {
map: MapType;
/**
* @desc
* alias of `map`
*/
lift: MapType;
/**
* @desc
* alias of `map`
*/
fmap: MapType;
}
declare type FB<M> = FunctorBuilder<M>;
declare type F1M<Tag extends keyof T.Tag1List<any>, A0> = <R>(f: Fun<[A0], R>) => T.Tag1List<R>[Tag];
declare type F2M<Tag extends keyof T.Tag2List<any, any>, A0, A1> = <R>(f: Fun<[A1], R>) => T.Tag2List<A0, R>[Tag];
declare type F3M<Tag extends keyof T.Tag3List<any, any, any>, A0, A1, A2> = <R>(f: Fun<[A2], R>) => T.Tag3List<A0, A1, R>[Tag];
declare type F4M<Tag extends keyof T.Tag4List<any, any, any, any>, A0, A1, A2, A3> = <R>(f: Fun<[A3], R>) => T.Tag4List<A0, A1, A2, R>[Tag];
export interface Functor1<Tag extends keyof T.Tag1List<any>, A0> extends T.Tagged<Tag>, FB<F1M<Tag, A0>> {
}
export interface Functor2<Tag extends keyof T.Tag2List<any, any>, A0, A1> extends T.Tagged<Tag>, FB<F2M<Tag, A0, A1>> {
}
export interface Functor3<Tag extends keyof T.Tag3List<any, any, any>, A0, A1, A2> extends T.Tagged<Tag>, FB<F3M<Tag, A0, A1, A2>> {
}
export interface Functor4<Tag extends keyof T.Tag4List<any, any, any, any>, A0, A1, A2, A3> extends T.Tagged<Tag>, FB<F4M<Tag, A0, A1, A2, A3>> {
}
export declare namespace Functor {
function map<V, U>(f: Fun<[V], U>): <Tag extends keyof T.Tag1List<any>>(wa: Functor1<Tag, V>) => T.Tag1List<U>[Tag];
}
export {};