import { $ } from '.';
import { Functor } from './functor';
import { Apply } from './apply';
import { Cartesian } from './cartesian';
import { Applicative } from './applicative';
import { FlatMap } from './flatmap';
import { Monad } from './monad';
export declare class Id {
value: A;
constructor(value: A);
valueOf(): A;
}
export declare class IdFunctor implements Functor<"Id"> {
map(f: (a: A) => B, fb: $<"Id", A>): $<"Id", B>;
}
declare module '.' {
interface _ {
"Id": Id;
}
}
declare module './functor' {
namespace Functor {
let Id: IdFunctor;
}
}
export declare class IdCartesian implements Cartesian<"Id"> {
product(fa: Id, fb: Id): Id<[A, B]>;
}
declare module './cartesian' {
namespace Cartesian {
let Id: IdCartesian;
}
}
export declare class IdApply implements Apply<"Id"> {
ap(fab: Id<(a: A) => B>, fa: Id): Id;
map: (f: (a: A) => B, fb: Id) => Id;
product: (fa: Id, fb: Id) => Id<[A, B]>;
}
declare module './apply' {
namespace Apply {
let Id: IdApply;
}
}
export declare class IdApplicative extends IdApply implements Applicative<"Id"> {
pure(a: A): Id;
}
declare module './applicative' {
namespace Applicative {
let Id: IdApplicative;
}
}
export declare class IdFlatMap extends IdApply implements FlatMap<"Id"> {
flatMap(f: (a: A) => Id, fa: Id): Id;
}
declare module './flatmap' {
namespace FlatMap {
let Id: IdFlatMap;
}
}
export declare class IdMonad extends IdApplicative implements Monad<"Id"> {
flatMap: (f: (a: A) => Id, fa: Id) => Id;
}
declare module './monad' {
namespace Monad {
let Id: IdMonad;
}
}