voided-data
Version:
Proper DS for TS
33 lines (32 loc) • 1.07 kB
TypeScript
/**
* @startuml
* enum Maybe<T> <<(U, white)>> {
* }
*
* struct Some<T> {
* }
* struct None<T> {
* }
*
* Maybe <|-- Some
* Maybe <|-- None
* @enduml
*/
export interface Maybe<Just> {
map: <NewJust>(m: (just: Just) => NewJust) => Maybe<NewJust>;
match: <Some, None>(onSome: (just: Just) => Some, onNone: () => None) => Some | None;
}
interface Some<Just> extends Maybe<Just> {
just: Just;
map: <NewJust>(m: (just: Just) => NewJust) => Some<NewJust>;
match: <Some, None>(onSome: (just: Just) => Some, onNone: () => None) => Some;
}
interface None<Just> extends Maybe<Just> {
map: <NewJust>(m: (just: Just) => NewJust) => None<NewJust>;
match: <Some, None>(onSome: (just: Just) => Some, onNone: () => None) => None;
}
export declare function isSome<Just>(maybe: Maybe<Just>): maybe is Some<Just>;
export declare function isNone<Just>(maybe: Maybe<Just>): maybe is None<Just>;
export declare function some<Just>(just: Just): Some<Just>;
export declare function none<Just>(): None<Just>;
export {};