export interface Effect { output: T } export interface Kind1 { input: Inp return: Out } export type Func = Kind1 | (<_T extends Inp>() => Out) export interface Bind<_Eff extends Effect, _Fn extends Func> extends Effect {} export interface Seq<_Effs extends Effect[]> extends Effect {} export interface Do<_Effs extends Effect[]> extends Effect {} export interface Pure extends Effect {}