aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/macro/syntax/export.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/macro/syntax/export.lux')
-rw-r--r--stdlib/source/library/lux/macro/syntax/export.lux24
1 files changed, 21 insertions, 3 deletions
diff --git a/stdlib/source/library/lux/macro/syntax/export.lux b/stdlib/source/library/lux/macro/syntax/export.lux
index 164032dcb..91428bb7e 100644
--- a/stdlib/source/library/lux/macro/syntax/export.lux
+++ b/stdlib/source/library/lux/macro/syntax/export.lux
@@ -1,6 +1,8 @@
(.module:
[library
[lux "*"
+ [abstract
+ [monad {"+" [do]}]]
[control
["<>" parser ("[1]\[0]" monad)
["<[0]>" code {"+" [Parser]}]]]]])
@@ -9,7 +11,23 @@
Code
(` .private))
-(def: .public (parser un_exported)
+(def: policy
+ (Parser Code)
+ (do [! <>.monad]
+ [candiate <code>.next]
+ (case candiate
+ [_ (#.Identifier ["" _])]
+ (in default_policy)
+
+ (^or [_ (#.Bit _)]
+ [_ (#.Identifier _)])
+ (do !
+ [_ <code>.any]
+ (in candiate))
+
+ _
+ (in default_policy))))
+
+(def: .public parser
(All (_ a) (-> (Parser a) (Parser [Code a])))
- (<>.either (<>.and <code>.any un_exported)
- (<>.and (<>\in ..default_policy) un_exported)))
+ (<>.and ..policy))