import { $, HKT, datatype, kind } from '.' export interface Functor { map(f: (a: A) => B, fa: $): $ } export type FunctorInstances = keyof typeof Functor export namespace Functor { export let Array = { map: (f: (a: A) => B, fb: A[]) => fb.map(f) } } export function map(f: (a: A) => B, fa: $): $ { let instance = Functor[kind(fa)] as Functor return instance.map(f, fa) }