/** * Alt * * 1. a.alt(b).alt(c) is equivalent to a.alt(b.alt(c)) (associativity) * 2. a.alt(b).map(f) is equivalent to a.map(f).alt(b.map(f)) (distributivity) * * alt :: Alt f => f a ~> f a -> f a */ import { Lazy } from '../function'; import { Functor, Functor1, Functor2 } from './Functor'; import { HKT, KindOf, URIS } from './HKT'; export interface Alt extends Functor { readonly alt: (fa: HKT, that: Lazy>) => HKT; } export interface Alt1 extends Functor1 { readonly alt: (fa: KindOf, that: Lazy>) => KindOf; } export interface Alt2 extends Functor2 { readonly alt: (fa: KindOf, that: Lazy>) => KindOf; }