npm install sums-up
In TypeScript:
import SumType from 'sums-up';
class Maybe<T> extends SumType<{ Just: [T]; Nothing: [] }> {}
function Just<T>(value: T): Maybe<T> {
return new Maybe("Just", value);
}
function Nothing<T>(): Maybe<T> {
return new Maybe("Nothing");
}
const x = Just("foo");
const result = x.caseOf({
Nothing: () => "nope",
Just: (a) => a + "bar",
});
Or in JavaScript
import SumType from 'sums-up';
class Maybe extends SumType {}
function Just(value) {
return new Maybe("Just", value);
}
function Nothing() {
return new Maybe("Nothing");
}
const x = Just("foo");
const result = x.caseOf({
Nothing: () => "nope",
Just: (a) => a + "bar",
});
If the kind of a sum type instance isn't present in the pattern given to caseOf
, a default key called _
will be used instead.
import SumType from 'sums-up';
class RequestState<T = never> extends SumType<{
NotStarted: [];
Connecting: [];
Downloading: [number];
Completed: [T];
Failed: [string];
}> {}
const state = new RequestState('Failed', 'Connection reset.');
const progressPercentage = state.caseOf({
Downloading: pct => pct,
Completed: () => 100,
_: () => 0
});
Contributors:
@hojberg @dfreeman @AdamEdgett