diff options
Diffstat (limited to 'stdlib/source/library/lux/macro/syntax/export.lux')
-rw-r--r-- | stdlib/source/library/lux/macro/syntax/export.lux | 24 |
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)) |