aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/common.milch7
-rw-r--r--core/result.milch7
2 files changed, 12 insertions, 2 deletions
diff --git a/core/common.milch b/core/common.milch
index cddf02f..2dc6698 100644
--- a/core/common.milch
+++ b/core/common.milch
@@ -1,8 +1,11 @@
;; Control flow
;;;;;;;;;;;;;;;;;;;;;;;;;
-(let . (\[f g]
- (\[x] (f (g x)))))
+; function composition
+(let . (\[f g x] (f (g x))))
+
+; impure version of .
+(let .! (\![f g x] (f (g x))))
(let flow (\[fs]
(foldr . id (reverse fs))))
diff --git a/core/result.milch b/core/result.milch
index f122ee6..903ca38 100644
--- a/core/result.milch
+++ b/core/result.milch
@@ -1,3 +1,5 @@
+(import "core/common")
+
(record Result/Ok value)
(record Result/Ex value)
@@ -23,3 +25,8 @@
(match (kind m)
:Result/Ok (Result/Ok/get-value m)
:Result/Ex (catch-f (Result/Ex/get-value m)))))
+
+; converts the given impure function that can throw a fatal error
+; to an impure function that returns a Result
+(let Result/safe! (\![fn! arg]
+ (try! Result/ex (.! Result/ok fn!) arg)))