aboutsummaryrefslogtreecommitdiffstats
path: root/core/result.milch
diff options
context:
space:
mode:
authorJan Tuomi <jans.tuomi@gmail.com>2022-12-06 21:18:18 +0200
committerJan Tuomi <jans.tuomi@gmail.com>2022-12-06 21:36:54 +0200
commit6b9782ce4a36e93156426b5747efcc90401b6251 (patch)
tree3a7c68ee5eb3a03ec00a0dd850bb8512eec5b84a /core/result.milch
parent35bf45fe54788c6fca6b105b65fc1622a4bb7d34 (diff)
Add core/result.milch
Diffstat (limited to 'core/result.milch')
-rw-r--r--core/result.milch25
1 files changed, 25 insertions, 0 deletions
diff --git a/core/result.milch b/core/result.milch
new file mode 100644
index 0000000..897a540
--- /dev/null
+++ b/core/result.milch
@@ -0,0 +1,25 @@
+(record Result/Ok value)
+(record Result/Ex value)
+
+(let Result/ok Result/Ok/create)
+(let Result/ex Result/Ex/create)
+
+(let Result/map (\[f m]
+ (match (kind m)
+ "Result/Ok" (Result/ok (f (Result/Ok/get-value m)))
+ "Result/Ex" m)))
+
+(let Result/map-ex (\[f m]
+ (match (kind m)
+ "Result/Ok" m
+ "Result/Ex" (Result/ex (f (Result/Ex/get-value m))))))
+
+(let Result/and-then (\[f m]
+ (match (kind m)
+ "Result/Ok" (f (Result/Ok/get-value m))
+ "Result/Ex" m)))
+
+(let Result/try (\[catch-f m]
+ (match (kind m)
+ "Result/Ok" (Result/Ok/get-value m)
+ "Result/Ex" (catch-f (Result/Ex/get-value m)))))