Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 26x 2x 2x 2x 2x 6x 6x 9x 9x 1x | export type None = null | undefined
export type Nullable<T> = T | None
function nullableIsNone<T> (nullable: Nullable<T>): boolean {
return nullable === null || nullable === undefined
}
function nullableMap<A, B> (func: (val: A) => B): (nullable: Nullable<A>) => Nullable<B> {
return function (nullable: Nullable<A>): Nullable<B> {
return nullableIsNone(nullable)
? null
: func(nullable as A)
}
}
function nullableWithDefault<T> (defaultVal: T): (nullable: Nullable<T>) => T {
return function (nullable: Nullable<T>): T {
return nullableIsNone(nullable)
? defaultVal
: nullable as T
}
}
function nullableAndThen<A, B> (func: (val: A) => Nullable<B>): (nullable: Nullable<A>) => Nullable<B> {
return function (nullable: Nullable<A>): Nullable<B> {
return nullableIsNone(nullable)
? null
: func(nullable as A)
}
}
function nullableAp<A, B> (targetNullable: Nullable<A>): (applicativeNullable: Nullable<(val: A) => B>) => Nullable<B> {
return function (applicativeNullable: Nullable<(val: A) => B>): Nullable<B> {
return nullableIsNone(applicativeNullable) || nullableIsNone(targetNullable)
? null
: (applicativeNullable as (val: A) => B)(targetNullable as A)
}
}
export const Nullable = {
andThen: nullableAndThen,
ap: nullableAp,
isNone: nullableIsNone,
map: nullableMap,
withDefault: nullableWithDefault,
}
|