decline-ts
Version:
Composable command-line parser for TypeScript - a (partial) porting of Scala decline using fp-ts
35 lines (34 loc) • 1.03 kB
TypeScript
export declare type Many<A> = Many.Just<A> | Many.Prod<A> | Many.Sum<A>;
export declare namespace Many {
type Just<A> = {
readonly _tag: 'Just';
readonly value: A;
};
type Prod<A> = {
readonly _tag: 'Prod';
readonly allOf: ReadonlyArray<Many<A>>;
};
type Sum<A> = {
readonly _tag: 'Sum';
readonly anyOf: ReadonlyArray<Many<A>>;
};
/**
* Constructors
*/
const just: <A>(value: A) => Just<A>;
const prod: <A>(...allOf: readonly Many<A>[]) => Prod<A>;
const sum: <A>(...anyOf: readonly Many<A>[]) => Sum<A>;
/**
* Methods
*/
const asProd: <A>(many: Many<A>) => Prod<A>;
const asSum: <A>(many: Many<A>) => Sum<A>;
const isJust: <A>(many: Many<A>) => many is Just<A>;
const isProd: <A>(many: Many<A>) => many is Prod<A>;
namespace Prod {
const and: <A>(other: Prod<A>) => (p: Prod<A>) => Prod<A>;
}
namespace Sum {
const or: <A>(other: Sum<A>) => (s: Sum<A>) => Sum<A>;
}
}