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, } |