diff options
Diffstat (limited to 'stdlib/source/lux/data')
-rw-r--r-- | stdlib/source/lux/data/format/context.lux | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/stdlib/source/lux/data/format/context.lux b/stdlib/source/lux/data/format/context.lux new file mode 100644 index 000000000..a515052c6 --- /dev/null +++ b/stdlib/source/lux/data/format/context.lux @@ -0,0 +1,34 @@ +(;module: + lux + (lux (control ["p" parser] + ["ex" exception #+ exception:] + [monad #+ do]) + (data ["R" result] + (coll ["d" dict])))) + +(exception: #export Unknown-Property) + +(type: #export Context + (d;Dict Text Text)) + +(type: #export (Property a) + (p;Parser Context a)) + +(def: #export (property name) + (-> Text (Property Text)) + (function [context] + (case (d;get name context) + (#;Some value) + (ex;return [context value]) + + #;None + (ex;throw Unknown-Property name)))) + +(def: #export (run context property) + (All [a] (-> Context (Property a) (R;Result a))) + (case (property context) + (#R;Success [_ output]) + (#R;Success output) + + (#R;Error error) + (#R;Error error))) |