summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/prelude/maybe.ts20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/prelude/maybe.ts b/src/prelude/maybe.ts
new file mode 100644
index 0000000000..f9ac95c0b5
--- /dev/null
+++ b/src/prelude/maybe.ts
@@ -0,0 +1,20 @@
+export interface Maybe<T> {
+ isJust(): this is Just<T>;
+}
+
+export type Just<T> = Maybe<T> & {
+ get(): T
+};
+
+export function just<T>(value: T): Just<T> {
+ return {
+ isJust: () => true,
+ get: () => value
+ };
+}
+
+export function nothing<T>(): Maybe<T> {
+ return {
+ isJust: () => false,
+ };
+}