import { Kind } from '../../kinds/index.js'; import { TypeSkell } from '../../typeskell/index.js'; import { Functor } from '../functor'; export declare namespace SemiAlternative { type $orElse = TypeSkell<'(-> F a ..y) -> F a ..x -> F a ..y', { F: F; }>; type $or = TypeSkell<'F a ..x -> F a ..y -> F a ..xy', { F: F; }>; } /** * SemiAlternative is a typeclass that defines a single operation, or. * It is an associative operation that allows you to combine two effects. * * Laws: * Associativity: `a or (b or c) = (a or b) or c` * Left Distributivity: `map f (a or b) = (map f a) or (map f b)` * */ export interface SemiAlternative extends Functor { orElse: SemiAlternative.$orElse; } export declare const or: (semiAlternative: SemiAlternative) => SemiAlternative.$or;