aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/control/security/capability.lux
diff options
context:
space:
mode:
authorEduardo Julian2021-07-27 03:51:10 -0400
committerEduardo Julian2021-07-27 03:51:10 -0400
commit061fd8a209bbcaffc2bfb850ac6046752a567d50 (patch)
tree8cd83ad7d0bc06ded7976eb5420467e485733ae8 /stdlib/source/library/lux/control/security/capability.lux
parente64b6d0114c26a455e19a416b5f02a4d19dd711f (diff)
Re-named wrap => in && unwrap => out.
Diffstat (limited to 'stdlib/source/library/lux/control/security/capability.lux')
-rw-r--r--stdlib/source/library/lux/control/security/capability.lux30
1 files changed, 21 insertions, 9 deletions
diff --git a/stdlib/source/library/lux/control/security/capability.lux b/stdlib/source/library/lux/control/security/capability.lux
index 100eea37e..14461791f 100644
--- a/stdlib/source/library/lux/control/security/capability.lux
+++ b/stdlib/source/library/lux/control/security/capability.lux
@@ -37,6 +37,7 @@
(|>> :abstraction))
(def: #export (use capability input)
+ {#.doc (doc "Applies a capability against its required input.")}
(All [brand input output]
(-> (Capability brand input output)
input
@@ -47,23 +48,34 @@
{declaration |declaration|.parser}
{annotations (<>.maybe |annotations|.parser)}
{[forge input output] (<c>.form ($_ <>.and <c>.local_identifier <c>.any <c>.any))})
+ {#.doc (doc "Defines a capability as a unique type, and a constructor for instances."
+
+ (capability: (Can_Duplicate a)
+ (can_duplicate a [a a]))
+
+ (let [capability (can_duplicate
+ (function (_ value)
+ [value value]))
+ [left right] (..use capability 123)]
+ (is? left right)))}
(do {! meta.monad}
[this_module meta.current_module_name
#let [[name vars] declaration]
g!brand (\ ! map (|>> %.code code.text)
(macro.gensym (format (%.name [this_module name]))))
#let [capability (` (..Capability (.primitive (~ g!brand)) (~ input) (~ output)))]]
- (wrap (list (` (type: (~+ (|export|.format export))
- (~ (|declaration|.format declaration))
- (~ capability)))
- (` (def: (~ (code.local_identifier forge))
- (All [(~+ (list\map code.local_identifier vars))]
- (-> (-> (~ input) (~ output))
- (~ capability)))
- (~! ..forge)))
- ))))
+ (in (list (` (type: (~+ (|export|.format export))
+ (~ (|declaration|.format declaration))
+ (~ capability)))
+ (` (def: (~ (code.local_identifier forge))
+ (All [(~+ (list\map code.local_identifier vars))]
+ (-> (-> (~ input) (~ output))
+ (~ capability)))
+ (~! ..forge)))
+ ))))
(def: #export (async capability)
+ {#.doc (doc "Converts a synchronous I/O-based capability into an asynchronous capability.")}
(All [brand input output]
(-> (Capability brand input (IO output))
(Capability brand input (Async output))))