import { Lazy } from './lazy'; export abstract class Functor extends Lazy { abstract fmap(f: (a: a) => b): Functor; } export namespace Functor { export function fmap(f: (a: a) => b, m: Functor): Functor { return m.fmap(f); } }