aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/macro/syntax/annotations.lux
diff options
context:
space:
mode:
authorEduardo Julián2021-07-14 14:44:53 -0400
committerGitHub2021-07-14 14:44:53 -0400
commit89ca40f2f101b2b38187eab5cf905371cd47eb57 (patch)
treef05fd1677a70988c6b39c07e52d031d86eff28f1 /stdlib/source/library/lux/macro/syntax/annotations.lux
parent2431e767a09894c2f685911ba7f1ba0b7de2a165 (diff)
parent8252bdb938a0284dd12e7365b4eb84b5357bacac (diff)
Merge pull request #58 from LuxLang/hierarchy_normalization
Hierarchy normalization
Diffstat (limited to 'stdlib/source/library/lux/macro/syntax/annotations.lux')
-rw-r--r--stdlib/source/library/lux/macro/syntax/annotations.lux42
1 files changed, 42 insertions, 0 deletions
diff --git a/stdlib/source/library/lux/macro/syntax/annotations.lux b/stdlib/source/library/lux/macro/syntax/annotations.lux
new file mode 100644
index 000000000..28f5a233e
--- /dev/null
+++ b/stdlib/source/library/lux/macro/syntax/annotations.lux
@@ -0,0 +1,42 @@
+(.module:
+ [library
+ [lux #*
+ [abstract
+ [equivalence (#+ Equivalence)]]
+ [control
+ ["." function]
+ ["<>" parser
+ ["<.>" code (#+ Parser)]]]
+ [data
+ ["." product]
+ ["." name]
+ [collection
+ ["." list ("#\." functor)]]]
+ [macro
+ ["." code]]]])
+
+(type: #export Annotations
+ (List [Name Code]))
+
+(def: #export equivalence
+ (Equivalence Annotations)
+ (list.equivalence
+ (product.equivalence name.equivalence
+ code.equivalence)))
+
+(def: #export empty
+ Annotations
+ (list))
+
+(def: #export format
+ (-> Annotations Code)
+ (let [entry (product.apply code.tag function.identity)]
+ (|>> (list\map entry)
+ code.record)))
+
+(def: #export parser
+ (Parser Annotations)
+ (<code>.record
+ (<>.some
+ (<>.and <code>.tag
+ <code>.any))))