/* adapted from https://github.com/gcanti/fp-ts */
/**
* @tsplus type Maybe
*/
export type Maybe = None | Some
export interface MaybeF extends HKT {
readonly type: Maybe
}
export declare namespace Maybe {
export type HKT = MaybeF
}
/**
* @tsplus type Maybe.Ops
*/
export interface MaybeOps {
$: MaybeAspects
}
export const Maybe: MaybeOps = {
$: {}
}
/**
* @tsplus type Maybe.Aspects
*/
export interface MaybeAspects {}
/**
* Definitions
*
* @tsplus type Maybe.None
*/
export interface None {
readonly _tag: "None"
}
/**
* @tsplus type Maybe.Some
*/
export interface Some {
readonly _tag: "Some"
readonly value: A
}
/**
* @tsplus unify Maybe
* @tsplus unify Maybe.Some
* @tsplus unify Maybe.None
*/
export function unifyMaybe>(
self: X
): Maybe ? A : never> {
return self
}
export type ArrayOfMaybies[]> = {
[k in keyof Ts]: Ts[k] extends Maybe ? A : never
}[number]
/**
* Constructs `None`.
*
* @tsplus static Maybe.Ops none
*/
export const none: Maybe = { _tag: "None" }
/**
* Constructs `None`.
*
* @tsplus static Maybe.Ops empty
*/
export function empty(): Maybe {
return none
}
/**
* Constructs `Some`.
*
* @tsplus static Maybe.Ops some
*/
export function some(a: A): Maybe {
return { _tag: "Some", value: a }
}
/**
* Returns `true` if the maybe is `None`, `false` otherwise.
*
* @tsplus fluent Maybe isNone
*/
export function isNone(fa: Maybe): fa is None {
return fa._tag === "None"
}
/**
* Returns `true` if the maybe is an instance of `Some`, `false` otherwise.
*
* @tsplus fluent Maybe isSome
*/
export function isSome(fa: Maybe): fa is Some {
return fa._tag === "Some"
}
/**
* @tsplus static Maybe.Ops isMaybe
*/
export function isMaybe(u: unknown): u is Maybe {
return (
typeof u === "object" &&
u != null &&
"_tag" in u &&
(u["_tag"] === "Some" || u["_tag"] === "None")
)
}
/**
* @tsplus operator Maybe ==
*/
export function equals(a: Maybe, b: Maybe) {
return Equals.equals(a, b)
}