import type { Applicative, ApplicativeConstructor } from "./applicative"; export interface Monad extends Applicative { chain(f: (a: T) => Monad): Monad; join(this: Monad>): Monad; } export interface MonadConstructor extends ApplicativeConstructor { from(item: I): Monad; }