thi-ng/umbrella

View on GitHub
packages/transducers/src/reduced.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { IDeref } from "@thi.ng/api";

export class Reduced<T> implements IDeref<T> {
    protected value: T;

    constructor(val: T) {
        this.value = val;
    }

    deref() {
        return this.value;
    }
}

export const reduced = <T>(x: T) => new Reduced<T>(x);

export const isReduced = <T>(x: any): x is Reduced<T> => x instanceof Reduced;

export const ensureReduced = <T>(x: T) =>
    x instanceof Reduced ? x : new Reduced<T>(x);

export const unreduced = <T>(x: T | Reduced<T>) =>
    x instanceof Reduced ? <T>x.deref() : x;