import { pair, Partial } from './interfaces'; import { Functor } from './typeclasses/functor'; import { Cartesian } from './typeclasses/cartesian'; import { Apply } from './typeclasses/apply'; import { FlatMap } from './typeclasses/flatmap'; import { Applicative } from './typeclasses/applicative'; import { Monad } from './typeclasses/monad'; export declare const kind = "State"; export declare type kind = typeof kind; declare module './typeclasses' { interface _ { 'State': State; } } export declare class State { runState: (s: S) => pair; constructor(runState: (s: S) => pair); runA(state: S): A; runS(state: S): S; static pure(a: A): State; static get(): State; static put(s: S): State; static modify(f: (s: S) => Partial): State; patch(f: (a: A, s: S) => Partial): State>; } export declare class StateFunctor implements Functor { map(f: (a: A) => B, fa: State): State; } declare module './typeclasses/functor' { namespace Functor { let State: StateFunctor; } } export declare class StateCartesian implements Cartesian { product(fa: State, fb: State): State; } declare module './typeclasses/cartesian' { namespace Cartesian { let State: StateCartesian; } } export declare class StateApply implements Apply { ap(fab: State B>, fa: State): State; map: (f: (a: A) => B, fa: State) => State; product: (fa: State, fb: State) => State; } declare module './typeclasses/apply' { namespace Apply { let State: StateApply; } } export declare class StateApplicative extends StateApply implements Applicative { pure: typeof State.pure; } declare module './typeclasses/applicative' { namespace Applicative { let State: StateApplicative; } } export declare class StateFlatMap extends StateApplicative implements FlatMap { flatMap(f: (a: A) => State, fa: State): State; } declare module './typeclasses/flatmap' { namespace FlatMap { let State: StateFlatMap; } } export declare class StateMonad extends StateApplicative implements Monad { flatMap: (f: (a: A) => State, fa: State) => State; } declare module './typeclasses/monad' { namespace Monad { let State: StateMonad; } }