import type { ApplicativeMin } from './Applicative' import type { BindMin } from './Bind' import { Applicative } from './Applicative' import { Bind } from './Bind' import * as HKT from './HKT' export interface Monad extends Applicative, Bind {} export type MonadMin = ApplicativeMin & BindMin export function Monad(F: MonadMin): Monad { return HKT.instance>({ ...Applicative(F), ...Bind(F) }) }