aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/lux.lux342
-rw-r--r--source/lux/codata/stream.lux2
-rw-r--r--source/lux/control/comonad.lux4
-rw-r--r--source/lux/control/dict.lux18
-rw-r--r--source/lux/control/monad.lux6
-rw-r--r--source/lux/control/stack.lux20
-rw-r--r--source/lux/data/list.lux76
-rw-r--r--source/lux/data/text.lux2
-rw-r--r--source/lux/host/jvm.lux8
-rw-r--r--source/lux/meta/ast.lux2
-rw-r--r--source/lux/meta/lux.lux8
-rw-r--r--source/lux/meta/macro.lux16
-rw-r--r--source/lux/meta/syntax.lux18
-rw-r--r--src/lux/analyser.clj314
-rw-r--r--src/lux/analyser/case.clj8
-rw-r--r--src/lux/analyser/host.clj56
-rw-r--r--src/lux/analyser/lux.clj6
-rw-r--r--src/lux/analyser/record.clj4
-rw-r--r--src/lux/base.clj24
-rw-r--r--src/lux/lexer.clj18
-rw-r--r--src/lux/parser.clj26
-rw-r--r--src/lux/type.clj10
22 files changed, 444 insertions, 544 deletions
diff --git a/source/lux.lux b/source/lux.lux
index cf56f326a..422fb4fad 100644
--- a/source/lux.lux
+++ b/source/lux.lux
@@ -155,7 +155,9 @@
(_lux_declare-tags [#name #inner-closures #locals #closure] Env)
## (deftype Cursor
-## (, Text Int Int))
+## (& #module Text
+## #line Int
+## #column Int))
(_lux_def Cursor
(#NamedT ["lux" "Cursor"]
(#TupleT (#Cons Text (#Cons Int (#Cons Int #Nil))))))
@@ -163,18 +165,17 @@
(_lux_declare-tags [#module #line #column] Cursor)
## (deftype (Meta m v)
-## (| (#Meta m v)))
+## (& #meta m
+## #datum v))
(_lux_def Meta
(#NamedT ["lux" "Meta"]
(#UnivQ #Nil
(#UnivQ #Nil
- (#VariantT (#Cons ## "lux;Meta"
- (#TupleT (#Cons (#BoundT 3)
- (#Cons (#BoundT 1)
- #Nil)))
- #Nil))))))
+ (#TupleT (#Cons (#BoundT 3)
+ (#Cons (#BoundT 1)
+ #Nil)))))))
(_lux_export Meta)
-(_lux_declare-tags [#Meta] Meta)
+(_lux_declare-tags [#meta #datum] Meta)
## (deftype (AST' w)
## (| (#BoolS Bool)
@@ -414,13 +415,13 @@
## (def (_meta data)
## (-> (AST' (Meta Cursor)) AST)
-## (#Meta [["" -1 -1] data]))
+## [["" -1 -1] data])
(_lux_def _meta
(_lux_: (#LambdaT (#AppT AST'
(#AppT Meta Cursor))
AST)
(_lux_lambda _ data
- (#Meta _cursor data))))
+ [_cursor data])))
## (def (return x)
## (All [a]
@@ -523,7 +524,7 @@
(_lux_: Macro
(_lux_lambda _ tokens
(_lux_case tokens
- (#Cons (#Meta _ (#TupleS (#Cons arg args'))) (#Cons body #Nil))
+ (#Cons [_ (#TupleS (#Cons arg args'))] (#Cons body #Nil))
(return (#Cons (_meta (#FormS (#Cons (_meta (#SymbolS "" "_lux_lambda"))
(#Cons (_meta (#SymbolS "" ""))
(#Cons arg
@@ -538,7 +539,7 @@
#Nil))))))
#Nil))
- (#Cons (#Meta _ (#SymbolS self)) (#Cons (#Meta _ (#TupleS (#Cons arg args'))) (#Cons body #Nil)))
+ (#Cons [_ (#SymbolS self)] (#Cons [_ (#TupleS (#Cons arg args'))] (#Cons body #Nil)))
(return (#Cons (_meta (#FormS (#Cons (_meta (#SymbolS "" "_lux_lambda"))
(#Cons (_meta (#SymbolS self))
(#Cons arg
@@ -561,8 +562,8 @@
(_lux_: Macro
(lambda'' [tokens]
(_lux_case tokens
- (#Cons [(#Meta [_ (#TagS ["" "export"])])
- (#Cons [(#Meta [_ (#FormS (#Cons [name args]))])
+ (#Cons [[_ (#TagS ["" "export"])]
+ (#Cons [[_ (#FormS (#Cons [name args]))]
(#Cons [type (#Cons [body #Nil])])])])
(return (#Cons [(_meta (#FormS (#Cons [(_meta (#SymbolS ["" "_lux_def"]))
(#Cons [name
@@ -577,7 +578,7 @@
(#Cons [(_meta (#FormS (#Cons [(symbol$ ["" "_lux_export"]) (#Cons [name #Nil])])))
#Nil])]))
- (#Cons [(#Meta [_ (#TagS ["" "export"])]) (#Cons [name (#Cons [type (#Cons [body #Nil])])])])
+ (#Cons [[_ (#TagS ["" "export"])] (#Cons [name (#Cons [type (#Cons [body #Nil])])])])
(return (#Cons [(_meta (#FormS (#Cons [(_meta (#SymbolS ["" "_lux_def"]))
(#Cons [name
(#Cons [(_meta (#FormS (#Cons [(_meta (#SymbolS ["" "_lux_:"]))
@@ -588,7 +589,7 @@
(#Cons [(_meta (#FormS (#Cons [(symbol$ ["" "_lux_export"]) (#Cons [name #Nil])])))
#Nil])]))
- (#Cons [(#Meta [_ (#FormS (#Cons [name args]))])
+ (#Cons [[_ (#FormS (#Cons [name args]))]
(#Cons [type (#Cons [body #Nil])])])
(return (#Cons [(_meta (#FormS (#Cons [(_meta (#SymbolS ["" "_lux_def"]))
(#Cons [name
@@ -620,7 +621,7 @@
(def'' (defmacro tokens)
Macro
(_lux_case tokens
- (#Cons [(#Meta [_ (#FormS (#Cons [name args]))]) (#Cons [body #Nil])])
+ (#Cons [[_ (#FormS (#Cons [name args]))] (#Cons [body #Nil])])
(return (#Cons [(form$ (#Cons [(symbol$ ["lux" "def''"])
(#Cons [(form$ (#Cons [name args]))
(#Cons [(symbol$ ["lux" "Macro"])
@@ -630,7 +631,7 @@
(#Cons [(form$ (#Cons [(symbol$ ["" "_lux_declare-macro"]) (#Cons [name #Nil])]))
#Nil])]))
- (#Cons [(#Meta [_ (#TagS ["" "export"])]) (#Cons [(#Meta [_ (#FormS (#Cons [name args]))]) (#Cons [body #Nil])])])
+ (#Cons [[_ (#TagS ["" "export"])] (#Cons [[_ (#FormS (#Cons [name args]))] (#Cons [body #Nil])])])
(return (#Cons [(form$ (#Cons [(symbol$ ["lux" "def''"])
(#Cons [(tag$ ["" "export"])
(#Cons [(form$ (#Cons [name args]))
@@ -730,7 +731,7 @@
(def'' (replace-syntax reps syntax)
(->' RepEnv AST AST)
(_lux_case syntax
- (#Meta _ (#SymbolS "" name))
+ [_ (#SymbolS "" name)]
(_lux_case (get-rep name reps)
(#Some replacement)
replacement
@@ -738,19 +739,19 @@
#None
syntax)
- (#Meta _ (#FormS parts))
- (#Meta _ (#FormS (map (replace-syntax reps) parts)))
+ [meta (#FormS parts)]
+ [meta (#FormS (map (replace-syntax reps) parts))]
- (#Meta _ (#TupleS members))
- (#Meta _ (#TupleS (map (replace-syntax reps) members)))
+ [meta (#TupleS members)]
+ [meta (#TupleS (map (replace-syntax reps) members))]
- (#Meta _ (#RecordS slots))
- (#Meta _ (#RecordS (map (_lux_: (->' (#TupleT (#Cons AST (#Cons AST #Nil))) (#TupleT (#Cons AST (#Cons AST #Nil))))
- (lambda'' [slot]
- (_lux_case slot
- [k v]
- [(replace-syntax reps k) (replace-syntax reps v)])))
- slots)))
+ [meta (#RecordS slots)]
+ [meta (#RecordS (map (_lux_: (->' (#TupleT (#Cons AST (#Cons AST #Nil))) (#TupleT (#Cons AST (#Cons AST #Nil))))
+ (lambda'' [slot]
+ (_lux_case slot
+ [k v]
+ [(replace-syntax reps k) (replace-syntax reps v)])))
+ slots))]
_
syntax)
@@ -759,47 +760,47 @@
(def'' (update-bounds ast)
(->' AST AST)
(_lux_case ast
- (#Meta _ (#BoolS value))
+ [_ (#BoolS value)]
(bool$ value)
- (#Meta _ (#IntS value))
+ [_ (#IntS value)]
(int$ value)
- (#Meta _ (#RealS value))
+ [_ (#RealS value)]
(real$ value)
- (#Meta _ (#CharS value))
+ [_ (#CharS value)]
(char$ value)
- (#Meta _ (#TextS value))
+ [_ (#TextS value)]
(text$ value)
- (#Meta _ (#SymbolS value))
+ [_ (#SymbolS value)]
(symbol$ value)
- (#Meta _ (#TagS value))
+ [_ (#TagS value)]
(tag$ value)
- (#Meta _ (#TupleS members))
+ [_ (#TupleS members)]
(tuple$ (map update-bounds members))
- (#Meta _ (#RecordS pairs))
+ [_ (#RecordS pairs)]
(record$ (map (_lux_: (->' (#TupleT (#Cons AST (#Cons AST #Nil))) (#TupleT (#Cons AST (#Cons AST #Nil))))
(lambda'' [pair]
(let'' [name val] pair
[name (update-bounds val)])))
pairs))
- (#Meta _ (#FormS (#Cons (#Meta _ (#TagS "lux" "BoundT")) (#Cons (#Meta _ (#IntS idx)) #Nil))))
+ [_ (#FormS (#Cons [_ (#TagS "lux" "BoundT")] (#Cons [_ (#IntS idx)] #Nil)))]
(form$ (#Cons (tag$ ["lux" "BoundT"]) (#Cons (int$ (_jvm_ladd 2 idx)) #Nil)))
- (#Meta _ (#FormS members))
+ [_ (#FormS members)]
(form$ (map update-bounds members)))
)
(defmacro (All' tokens)
(_lux_case tokens
- (#Cons (#Meta _ (#TupleS (#Cons (#Meta _ (#SymbolS "" arg-name)) other-args)))
+ (#Cons [_ (#TupleS (#Cons [_ (#SymbolS "" arg-name)] other-args))]
(#Cons body #Nil))
(let'' bound-var (_meta (#FormS (#Cons (tag$ ["lux" "BoundT"]) (#Cons (int$ 1) #Nil))))
(let'' body' (replace-syntax (#Cons [arg-name bound-var] #Nil)
@@ -860,13 +861,13 @@
(defmacro (lambda' tokens)
(let'' [name tokens'] (_lux_: (#TupleT (list Ident ($' List AST)))
(_lux_case tokens
- (#Cons [(#Meta [_ (#SymbolS name)]) tokens'])
+ (#Cons [[_ (#SymbolS name)] tokens'])
[name tokens']
_
[["" ""] tokens]))
(_lux_case tokens'
- (#Cons [(#Meta [_ (#TupleS args)]) (#Cons [body #Nil])])
+ (#Cons [[_ (#TupleS args)] (#Cons [body #Nil])])
(_lux_case args
#Nil
(fail "lambda' requires a non-empty arguments tuple.")
@@ -888,8 +889,8 @@
(defmacro (def''' tokens)
(_lux_case tokens
- (#Cons [(#Meta [_ (#TagS ["" "export"])])
- (#Cons [(#Meta [_ (#FormS (#Cons [name args]))])
+ (#Cons [[_ (#TagS ["" "export"])]
+ (#Cons [[_ (#FormS (#Cons [name args]))]
(#Cons [type (#Cons [body #Nil])])])])
(return (list (form$ (list (symbol$ ["" "_lux_def"])
name
@@ -901,7 +902,7 @@
body))))))
(form$ (list (symbol$ ["" "_lux_export"]) name))))
- (#Cons [(#Meta [_ (#TagS ["" "export"])]) (#Cons [name (#Cons [type (#Cons [body #Nil])])])])
+ (#Cons [[_ (#TagS ["" "export"])] (#Cons [name (#Cons [type (#Cons [body #Nil])])])])
(return (list (form$ (list (symbol$ ["" "_lux_def"])
name
(form$ (list (symbol$ ["" "_lux_:"])
@@ -909,7 +910,7 @@
body))))
(form$ (list (symbol$ ["" "_lux_export"]) name))))
- (#Cons [(#Meta [_ (#FormS (#Cons [name args]))])
+ (#Cons [[_ (#FormS (#Cons [name args]))]
(#Cons [type (#Cons [body #Nil])])])
(return (list (form$ (list (symbol$ ["" "_lux_def"])
name
@@ -940,7 +941,7 @@
(defmacro (let' tokens)
(_lux_case tokens
- (#Cons [(#Meta [_ (#TupleS bindings)]) (#Cons [body #Nil])])
+ (#Cons [[_ (#TupleS bindings)] (#Cons [body #Nil])])
(return (list (foldL (_lux_: (->' AST (#TupleT (list AST AST))
AST)
(lambda' [body binding]
@@ -968,7 +969,7 @@
(def''' (spliced? token)
(->' AST Bool)
(_lux_case token
- (#Meta [_ (#FormS (#Cons [(#Meta [_ (#SymbolS ["" "~@"])]) (#Cons [_ #Nil])]))])
+ [_ (#FormS (#Cons [[_ (#SymbolS ["" "~@"])] (#Cons [_ #Nil])]))]
true
_
@@ -976,9 +977,8 @@
(def''' (wrap-meta content)
(->' AST AST)
- (_meta (#FormS (list (_meta (#TagS ["lux" "Meta"]))
- (_meta (#TupleS (list (_meta (#TupleS (list (_meta (#TextS "")) (_meta (#IntS -1)) (_meta (#IntS -1)))))
- content)))))))
+ (tuple$ (list (tuple$ (list (text$ "") (int$ -1) (int$ -1)))
+ content)))
(def''' (untemplate-list tokens)
(->' ($' List AST) AST)
@@ -1017,7 +1017,7 @@
true
(let' [elems' (map (lambda' [elem]
(_lux_case elem
- (#Meta [_ (#FormS (#Cons [(#Meta [_ (#SymbolS ["" "~@"])]) (#Cons [spliced #Nil])]))])
+ [_ (#FormS (#Cons [[_ (#SymbolS ["" "~@"])] (#Cons [spliced #Nil])]))]
spliced
_
@@ -1039,22 +1039,22 @@
(def''' (untemplate replace? subst token)
(->' Bool Text AST AST)
(_lux_case (_lux_: (#TupleT (list Bool AST)) [replace? token])
- [_ (#Meta [_ (#BoolS value)])]
+ [_ [_ (#BoolS value)]]
(wrap-meta (form$ (list (tag$ ["lux" "BoolS"]) (_meta (#BoolS value)))))
- [_ (#Meta [_ (#IntS value)])]
+ [_ [_ (#IntS value)]]
(wrap-meta (form$ (list (tag$ ["lux" "IntS"]) (_meta (#IntS value)))))
- [_ (#Meta [_ (#RealS value)])]
+ [_ [_ (#RealS value)]]
(wrap-meta (form$ (list (tag$ ["lux" "RealS"]) (_meta (#RealS value)))))
- [_ (#Meta [_ (#CharS value)])]
+ [_ [_ (#CharS value)]]
(wrap-meta (form$ (list (tag$ ["lux" "CharS"]) (_meta (#CharS value)))))
- [_ (#Meta [_ (#TextS value)])]
+ [_ [_ (#TextS value)]]
(wrap-meta (form$ (list (tag$ ["lux" "TextS"]) (_meta (#TextS value)))))
- [_ (#Meta [_ (#TagS [module name])])]
+ [_ [_ (#TagS [module name])]]
(let' [module' (_lux_case module
""
subst
@@ -1063,7 +1063,7 @@
module)]
(wrap-meta (form$ (list (tag$ ["lux" "TagS"]) (tuple$ (list (text$ module') (text$ name)))))))
- [_ (#Meta [_ (#SymbolS [module name])])]
+ [_ [_ (#SymbolS [module name])]]
(let' [module' (_lux_case module
""
subst
@@ -1072,17 +1072,17 @@
module)]
(wrap-meta (form$ (list (tag$ ["lux" "SymbolS"]) (tuple$ (list (text$ module') (text$ name)))))))
- [_ (#Meta [_ (#TupleS elems)])]
+ [_ [_ (#TupleS elems)]]
(splice replace? (untemplate replace? subst) (tag$ ["lux" "TupleS"]) elems)
- [true (#Meta [_ (#FormS (#Cons [(#Meta [_ (#SymbolS ["" "~"])]) (#Cons [unquoted #Nil])]))])]
+ [true [_ (#FormS (#Cons [[_ (#SymbolS ["" "~"])] (#Cons [unquoted #Nil])]))]]
unquoted
- [_ (#Meta [meta (#FormS elems)])]
- (let' [(#Meta [_ form']) (splice replace? (untemplate replace? subst) (tag$ ["lux" "FormS"]) elems)]
- (#Meta [meta form']))
+ [_ [meta (#FormS elems)]]
+ (let' [[_ form'] (splice replace? (untemplate replace? subst) (tag$ ["lux" "FormS"]) elems)]
+ [meta form'])
- [_ (#Meta [_ (#RecordS fields)])]
+ [_ [_ (#RecordS fields)]]
(wrap-meta (form$ (list (tag$ ["lux" "RecordS"])
(untemplate-list (map (_lux_: (->' (#TupleT (list AST AST)) AST)
(lambda' [kv]
@@ -1110,16 +1110,17 @@
(defmacro #export (|> tokens)
(_lux_case tokens
(#Cons [init apps])
- (return (list (foldL (lambda' [acc app]
- (_lux_case app
- (#Meta [_ (#TupleS parts)])
- (tuple$ (list:++ parts (list acc)))
+ (return (list (foldL (_lux_: (->' AST AST AST)
+ (lambda' [acc app]
+ (_lux_case app
+ [_ (#TupleS parts)]
+ (tuple$ (list:++ parts (list acc)))
- (#Meta [_ (#FormS parts)])
- (form$ (list:++ parts (list acc)))
+ [_ (#FormS parts)]
+ (form$ (list:++ parts (list acc)))
- _
- (`' ((~ app) (~ acc)))))
+ _
+ (`' ((~ app) (~ acc))))))
init
apps)))
@@ -1189,7 +1190,7 @@
(defmacro #export (^ tokens)
(_lux_case tokens
- (#Cons (#Meta _ (#SymbolS "" class-name)) #Nil)
+ (#Cons [_ (#SymbolS "" class-name)] #Nil)
(return (list (`' (#;DataT (~ (_meta (#TextS class-name)))))))
_
@@ -1198,7 +1199,8 @@
(defmacro #export (-> tokens)
(_lux_case (reverse tokens)
(#Cons output inputs)
- (return (list (foldL (lambda' [o i] (`' (#;LambdaT (~ i) (~ o))))
+ (return (list (foldL (_lux_: (->' AST AST AST)
+ (lambda' [o i] (`' (#;LambdaT (~ i) (~ o)))))
output
inputs)))
@@ -1210,12 +1212,12 @@
(defmacro (do tokens)
(_lux_case tokens
- (#Cons monad (#Cons (#Meta _ (#TupleS bindings)) (#Cons body #Nil)))
+ (#Cons monad (#Cons [_ (#TupleS bindings)] (#Cons body #Nil)))
(let' [body' (foldL (_lux_: (-> AST (, AST AST) AST)
(lambda' [body' binding]
(let' [[var value] binding]
(_lux_case var
- (#Meta _ (#TagS "" "let"))
+ [_ (#TagS "" "let")]
(`' (;let' (~ value) (~ body')))
_
@@ -1261,7 +1263,7 @@
(def''' (get-ident x)
(-> AST ($' Maybe Ident))
(_lux_case x
- (#Meta _ (#SymbolS sname))
+ [_ (#SymbolS sname)]
(#Some sname)
_
@@ -1270,7 +1272,7 @@
(def''' (get-name x)
(-> AST ($' Maybe Text))
(_lux_case x
- (#Meta _ (#SymbolS "" sname))
+ [_ (#SymbolS "" sname)]
(#Some sname)
_
@@ -1279,7 +1281,7 @@
(def''' (tuple->list tuple)
(-> AST ($' Maybe ($' List AST)))
(_lux_case tuple
- (#Meta _ (#TupleS members))
+ [_ (#TupleS members)]
(#Some members)
_
@@ -1288,7 +1290,7 @@
(def''' (apply-template env template)
(-> RepEnv AST AST)
(_lux_case template
- (#Meta _ (#SymbolS "" sname))
+ [_ (#SymbolS "" sname)]
(_lux_case (get-rep sname env)
(#Some subst)
subst
@@ -1296,13 +1298,13 @@
_
template)
- (#Meta _ (#TupleS elems))
+ [_ (#TupleS elems)]
(tuple$ (map (apply-template env) elems))
- (#Meta _ (#FormS elems))
+ [_ (#FormS elems)]
(form$ (map (apply-template env) elems))
- (#Meta _ (#RecordS members))
+ [_ (#RecordS members)]
(record$ (map (_lux_: (-> (, AST AST) (, AST AST))
(lambda' [kv]
(let' [[slot value] kv]
@@ -1324,7 +1326,7 @@
(defmacro #export (do-template tokens)
(_lux_case tokens
- (#Cons [(#Meta [_ (#TupleS bindings)]) (#Cons [(#Meta [_ (#TupleS templates)]) data])])
+ (#Cons [[_ (#TupleS bindings)] (#Cons [[_ (#TupleS templates)] data])])
(_lux_case (_lux_: (, ($' Maybe ($' List Text)) ($' Maybe ($' List ($' List AST))))
[(map% Maybe/Monad get-name bindings)
(map% Maybe/Monad tuple->list data)])
@@ -1413,19 +1415,20 @@
(defmacro #export (All tokens)
(let' [[self-name tokens] (_lux_: (, Text ASTList)
(_lux_case tokens
- (#Cons (#Meta _ (#SymbolS "" self-name)) tokens)
+ (#Cons [_ (#SymbolS "" self-name)] tokens)
[self-name tokens]
_
["" tokens]))]
(_lux_case tokens
- (#Cons (#Meta _ (#TupleS (#Cons harg targs))) (#Cons body #Nil))
+ (#Cons [_ (#TupleS (#Cons harg targs))] (#Cons body #Nil))
(_lux_case (map% Maybe/Monad get-name (#Cons harg targs))
(#Some names)
- (let' [body' (foldL (lambda' [body' name']
- (`' (#;UnivQ #;Nil (~ (|> body'
- (update-bounds)
- (replace-syntax (list [name' (make-bound 1)])))))))
+ (let' [body' (foldL (_lux_: (-> AST Text AST)
+ (lambda' [body' name']
+ (`' (#;UnivQ #;Nil (~ (|> body'
+ (update-bounds)
+ (replace-syntax (list [name' (make-bound 1)]))))))))
(replace-syntax (list [self-name (make-bound -2)])
body)
names)]
@@ -1547,7 +1550,7 @@
(def''' (macro-expand token)
(-> AST ($' Lux ($' List AST)))
(_lux_case token
- (#Meta [_ (#FormS (#Cons [(#Meta [_ (#SymbolS macro-name)]) args]))])
+ [_ (#FormS (#Cons [[_ (#SymbolS macro-name)] args]))]
(do Lux/Monad
[macro-name' (normalize macro-name)
?macro (find-macro macro-name')]
@@ -1567,7 +1570,7 @@
(def''' (macro-expand-all syntax)
(-> AST ($' Lux ($' List AST)))
(_lux_case syntax
- (#Meta [_ (#FormS (#Cons [(#Meta [_ (#SymbolS macro-name)]) args]))])
+ [_ (#FormS (#Cons [[_ (#SymbolS macro-name)] args]))]
(do Lux/Monad
[macro-name' (normalize macro-name)
?macro (find-macro macro-name')]
@@ -1583,13 +1586,13 @@
[parts' (map% Lux/Monad macro-expand-all (list& (symbol$ macro-name) args))]
(wrap (list (form$ (list:join parts')))))))
- (#Meta [_ (#FormS (#Cons [harg targs]))])
+ [_ (#FormS (#Cons [harg targs]))]
(do Lux/Monad
[harg+ (macro-expand-all harg)
targs+ (map% Lux/Monad macro-expand-all targs)]
(wrap (list (form$ (list:++ harg+ (list:join targs+))))))
- (#Meta [_ (#TupleS members)])
+ [_ (#TupleS members)]
(do Lux/Monad
[members' (map% Lux/Monad macro-expand-all members)]
(wrap (list (tuple$ (list:join members')))))
@@ -1600,14 +1603,15 @@
(def''' (walk-type type)
(-> AST AST)
(_lux_case type
- (#Meta [_ (#FormS (#Cons [(#Meta [_ (#TagS tag)]) parts]))])
+ [_ (#FormS (#Cons [[_ (#TagS tag)] parts]))]
(form$ (#Cons [(tag$ tag) (map walk-type parts)]))
- (#Meta [_ (#TupleS members)])
+ [_ (#TupleS members)]
(tuple$ (map walk-type members))
- (#Meta [_ (#FormS (#Cons [type-fn args]))])
- (foldL (lambda' [type-fn arg] (`' (#;AppT [(~ type-fn) (~ arg)])))
+ [_ (#FormS (#Cons [type-fn args]))]
+ (foldL (_lux_: (-> AST AST AST)
+ (lambda' [type-fn arg] (`' (#;AppT [(~ type-fn) (~ arg)]))))
(walk-type type-fn)
(map walk-type args))
@@ -1662,16 +1666,16 @@
(def''' (unfold-type-def type)
(-> AST ($' Lux (, AST ($' Maybe ($' List AST)))))
(_lux_case type
- (#Meta _ (#FormS (#Cons (#Meta _ (#SymbolS "" "|")) cases)))
+ [_ (#FormS (#Cons [_ (#SymbolS "" "|")] cases))]
(do Lux/Monad
[members (map% Lux/Monad
(: (-> AST ($' Lux (, Text AST)))
(lambda' [case]
(_lux_case case
- (#Meta _ (#TagS "" member-name))
+ [_ (#TagS "" member-name)]
(return [member-name (`' Unit)])
- (#Meta _ (#FormS (#Cons (#Meta _ (#TagS "" member-name)) (#Cons member-type #Nil))))
+ [_ (#FormS (#Cons [_ (#TagS "" member-name)] (#Cons member-type #Nil)))]
(return [member-name member-type])
_
@@ -1683,13 +1687,13 @@
(map (: (-> Text AST)
(lambda' [name] (tag$ ["" name]))))))]))
- (#Meta _ (#FormS (#Cons (#Meta _ (#SymbolS "" "&")) pairs)))
+ [_ (#FormS (#Cons [_ (#SymbolS "" "&")] pairs))]
(do Lux/Monad
[members (map% Lux/Monad
(: (-> (, AST AST) ($' Lux (, Text AST)))
(lambda' [pair]
(_lux_case pair
- [(#Meta _ (#TagS "" member-name)) member-type]
+ [[_ (#TagS "" member-name)] member-type]
(return [member-name member-type])
_
@@ -1707,24 +1711,24 @@
(defmacro #export (deftype tokens)
(let' [[export? tokens'] (: (, Bool (List AST))
(_lux_case tokens
- (#Cons (#Meta _ (#TagS "" "export")) tokens')
+ (#Cons [_ (#TagS "" "export")] tokens')
[true tokens']
_
[false tokens]))
[rec? tokens'] (: (, Bool (List AST))
(_lux_case tokens'
- (#Cons (#Meta _ (#TagS "" "rec")) tokens')
+ (#Cons [_ (#TagS "" "rec")] tokens')
[true tokens']
_
[false tokens']))
parts (: (Maybe (, Text (List AST) AST))
(_lux_case tokens'
- (#Cons (#Meta _ (#SymbolS "" name)) (#Cons type #Nil))
+ (#Cons [_ (#SymbolS "" name)] (#Cons type #Nil))
(#Some name #Nil type)
- (#Cons (#Meta _ (#FormS (#Cons (#Meta _ (#SymbolS "" name)) args))) (#Cons type #Nil))
+ (#Cons [_ (#FormS (#Cons [_ (#SymbolS "" name)] args))] (#Cons type #Nil))
(#Some name args type)
_
@@ -1780,7 +1784,8 @@
(_lux_case (reverse tokens)
(#Cons value actions)
(let' [dummy (symbol$ ["" ""])]
- (return (list (foldL (lambda' [post pre] (`' (_lux_case (~ pre) (~ dummy) (~ post))))
+ (return (list (foldL (_lux_: (-> AST AST AST)
+ (lambda' [post pre] (`' (_lux_case (~ pre) (~ dummy) (~ post)))))
value
actions))))
@@ -1790,20 +1795,20 @@
(defmacro (def' tokens)
(let' [[export? tokens'] (: (, Bool (List AST))
(_lux_case tokens
- (#Cons (#Meta _ (#TagS "" "export")) tokens')
+ (#Cons [_ (#TagS "" "export")] tokens')
[true tokens']
_
[false tokens]))
parts (: (Maybe (, AST (List AST) (Maybe AST) AST))
(_lux_case tokens'
- (#Cons (#Meta _ (#FormS (#Cons name args))) (#Cons type (#Cons body #Nil)))
+ (#Cons [_ (#FormS (#Cons name args))] (#Cons type (#Cons body #Nil)))
(#Some name args (#Some type) body)
(#Cons name (#Cons type (#Cons body #Nil)))
(#Some name #Nil (#Some type) body)
- (#Cons (#Meta _ (#FormS (#Cons name args))) (#Cons body #Nil))
+ (#Cons [_ (#FormS (#Cons name args))] (#Cons body #Nil))
(#Some name args #None body)
(#Cons name (#Cons body #Nil))
@@ -1849,7 +1854,7 @@
(lambda' expander [branch]
(let' [[pattern body] branch]
(_lux_case pattern
- (#Meta _ (#FormS (#Cons (#Meta _ (#SymbolS macro-name)) macro-args)))
+ [_ (#FormS (#Cons [_ (#SymbolS macro-name)] macro-args))]
(do Lux/Monad
[expansion (macro-expand (form$ (list& (symbol$ macro-name) body macro-args)))
expansions (map% Lux/Monad expander (as-pairs expansion))]
@@ -1908,7 +1913,7 @@
(def' (symbol? ast)
(-> AST Bool)
(case ast
- (#Meta _ (#SymbolS _))
+ [_ (#SymbolS _)]
true
_
@@ -1916,7 +1921,7 @@
(defmacro #export (let tokens)
(case tokens
- (\ (list (#Meta _ (#TupleS bindings)) body))
+ (\ (list [_ (#TupleS bindings)] body))
(if (multiple? 2 (length bindings))
(|> bindings as-pairs reverse
(foldL (: (-> AST (, AST AST) AST)
@@ -1936,7 +1941,7 @@
(def' (ast:show ast)
(-> AST Text)
(case ast
- (#Meta _ ast)
+ [_ ast]
(case ast
(\or (#BoolS val) (#IntS val) (#RealS val))
(->text val)
@@ -1972,10 +1977,10 @@
(defmacro #export (lambda tokens)
(case (: (Maybe (, Ident AST (List AST) AST))
(case tokens
- (\ (list (#Meta _ (#TupleS (#Cons head tail))) body))
+ (\ (list [_ (#TupleS (#Cons head tail))] body))
(#Some ["" ""] head tail body)
- (\ (list (#Meta _ (#SymbolS [_ name])) (#Meta _ (#TupleS (#Cons head tail))) body))
+ (\ (list [_ (#SymbolS [_ name])] [_ (#TupleS (#Cons head tail))] body))
(#Some ["" name] head tail body)
_
@@ -2001,20 +2006,20 @@
(defmacro #export (def tokens)
(let [[export? tokens'] (: (, Bool (List AST))
(case tokens
- (#Cons (#Meta _ (#TagS "" "export")) tokens')
+ (#Cons [_ (#TagS "" "export")] tokens')
[true tokens']
_
[false tokens]))
parts (: (Maybe (, AST (List AST) (Maybe AST) AST))
(case tokens'
- (\ (list (#Meta _ (#FormS (#Cons name args))) type body))
+ (\ (list [_ (#FormS (#Cons name args))] type body))
(#Some name args (#Some type) body)
(\ (list name type body))
(#Some name #Nil (#Some type) body)
- (\ (list (#Meta _ (#FormS (#Cons name args))) body))
+ (\ (list [_ (#FormS (#Cons name args))] body))
(#Some name args #None body)
(\ (list name body))
@@ -2062,17 +2067,17 @@
(defmacro #export (defsig tokens)
(let [[export? tokens'] (: (, Bool (List AST))
(case tokens
- (\ (list& (#Meta _ (#TagS "" "export")) tokens'))
+ (\ (list& [_ (#TagS "" "export")] tokens'))
[true tokens']
_
[false tokens]))
?parts (: (Maybe (, Ident (List AST) (List AST)))
(case tokens'
- (\ (list& (#Meta _ (#FormS (list& (#Meta _ (#SymbolS name)) args))) sigs))
+ (\ (list& [_ (#FormS (list& [_ (#SymbolS name)] args))] sigs))
(#Some name args sigs)
- (\ (list& (#Meta _ (#SymbolS name)) sigs))
+ (\ (list& [_ (#SymbolS name)] sigs))
(#Some name #Nil sigs)
_
@@ -2086,7 +2091,7 @@
(: (-> AST (Lux (, Text AST)))
(lambda [token]
(case token
- (\ (#Meta _ (#FormS (list (#Meta _ (#SymbolS _ "_lux_:")) type (#Meta _ (#SymbolS ["" name]))))))
+ (\ [_ (#FormS (list [_ (#SymbolS _ "_lux_:")] type [_ (#SymbolS ["" name])]))])
(wrap (: (, Text AST) [name type]))
_
@@ -2380,7 +2385,7 @@
(: (-> AST (Lux (, AST AST)))
(lambda [token]
(case token
- (\ (#Meta _ (#FormS (list (#Meta _ (#SymbolS _ "_lux_def")) (#Meta _ (#SymbolS tag-name)) value))))
+ (\ [_ (#FormS (list [_ (#SymbolS _ "_lux_def")] [_ (#SymbolS tag-name)] value))])
(wrap (: (, AST AST) [(tag$ tag-name) value]))
_
@@ -2391,14 +2396,14 @@
(defmacro #export (defstruct tokens)
(let [[export? tokens'] (: (, Bool (List AST))
(case tokens
- (\ (list& (#Meta _ (#TagS "" "export")) tokens'))
+ (\ (list& [_ (#TagS "" "export")] tokens'))
[true tokens']
_
[false tokens]))
?parts (: (Maybe (, AST (List AST) AST (List AST)))
(case tokens'
- (\ (list& (#Meta _ (#FormS (list& name args))) type defs))
+ (\ (list& [_ (#FormS (list& name args))] type defs))
(#Some name args type defs)
(\ (list& name type defs))
@@ -2431,7 +2436,8 @@
[(defmacro #export (<name> tokens)
(case (reverse tokens)
(\ (list& last init))
- (return (list (foldL (lambda [post pre] (` <form>))
+ (return (list (foldL (: (-> AST AST AST)
+ (lambda [post pre] (` <form>)))
last
init)))
@@ -2459,7 +2465,7 @@
(: (-> AST (Lux Text))
(lambda [def]
(case def
- (#Meta _ (#SymbolS "" name))
+ [_ (#SymbolS "" name)]
(return name)
_
@@ -2469,7 +2475,7 @@
(def (parse-alias tokens)
(-> (List AST) (Lux (, (Maybe Text) (List AST))))
(case tokens
- (\ (list& (#Meta _ (#TagS "" "as")) (#Meta _ (#SymbolS "" alias)) tokens'))
+ (\ (list& [_ (#TagS "" "as")] [_ (#SymbolS "" alias)] tokens'))
(return (: (, (Maybe Text) (List AST)) [(#Some alias) tokens']))
_
@@ -2478,17 +2484,17 @@
(def (parse-referrals tokens)
(-> (List AST) (Lux (, Referrals (List AST))))
(case tokens
- (\ (list& (#Meta _ (#TagS "" "refer")) referral tokens'))
+ (\ (list& [_ (#TagS "" "refer")] referral tokens'))
(case referral
- (#Meta _ (#TagS "" "all"))
+ [_ (#TagS "" "all")]
(return (: (, Referrals (List AST)) [#All tokens']))
- (\ (#Meta _ (#FormS (list& (#Meta _ (#TagS "" "only")) defs))))
+ (\ [_ (#FormS (list& [_ (#TagS "" "only")] defs))])
(do Lux/Monad
[defs' (extract-defs defs)]
(return (: (, Referrals (List AST)) [(#Only defs') tokens'])))
- (\ (#Meta _ (#FormS (list& (#Meta _ (#TagS "" "exclude")) defs))))
+ (\ [_ (#FormS (list& [_ (#TagS "" "exclude")] defs))])
(do Lux/Monad
[defs' (extract-defs defs)]
(return (: (, Referrals (List AST)) [(#Exclude defs') tokens'])))
@@ -2502,7 +2508,7 @@
(def (extract-symbol syntax)
(-> AST (Lux Ident))
(case syntax
- (#Meta _ (#SymbolS ident))
+ [_ (#SymbolS ident)]
(return ident)
_
@@ -2511,7 +2517,7 @@
(def (parse-openings tokens)
(-> (List AST) (Lux (, (Maybe Openings) (List AST))))
(case tokens
- (\ (list& (#Meta _ (#TagS "" "open")) (#Meta _ (#FormS (list& (#Meta _ (#TextS prefix)) structs))) tokens'))
+ (\ (list& [_ (#TagS "" "open")] [_ (#FormS (list& [_ (#TextS prefix)] structs))] tokens'))
(do Lux/Monad
[structs' (map% Lux/Monad extract-symbol structs)]
(return (: (, (Maybe Openings) (List AST)) [(#Some prefix structs') tokens'])))
@@ -2525,10 +2531,10 @@
(: (-> AST (Lux AST))
(lambda [token]
(case token
- (#Meta _ (#SymbolS "" sub-name))
+ [_ (#SymbolS "" sub-name)]
(return (symbol$ ["" ($ text:++ super-name "/" sub-name)]))
- (\ (#Meta _ (#FormS (list& (#Meta _ (#SymbolS "" sub-name)) parts))))
+ (\ [_ (#FormS (list& [_ (#SymbolS "" sub-name)] parts))])
(return (form$ (list& (symbol$ ["" ($ text:++ super-name "/" sub-name)]) parts)))
_
@@ -2542,10 +2548,10 @@
(: (-> AST (Lux (List Import)))
(lambda [token]
(case token
- (#Meta _ (#SymbolS "" m-name))
+ [_ (#SymbolS "" m-name)]
(wrap (list [m-name #None #All #None]))
- (\ (#Meta _ (#FormS (list& (#Meta _ (#SymbolS "" m-name)) extra))))
+ (\ [_ (#FormS (list& [_ (#SymbolS "" m-name)] extra))])
(do Lux/Monad
[alias+extra (parse-alias extra)
#let [[alias extra] alias+extra]
@@ -2724,10 +2730,11 @@
(` (open (~ (symbol$ [m-name name])) (~ (text$ prefix)))))))
structs)))]]
(wrap ($ list:++
- (list (` (_lux_import (~ (text$ m-name)))))
- (case m-alias
- #None (list)
- (#Some alias) (list (` (_lux_alias (~ (text$ alias)) (~ (text$ m-name))))))
+ (: (List AST) (list (` (_lux_import (~ (text$ m-name))))))
+ (: (List AST)
+ (case m-alias
+ #None (list)
+ (#Some alias) (list (` (_lux_alias (~ (text$ alias)) (~ (text$ m-name)))))))
(map (: (-> Text AST)
(lambda [def]
(` (_lux_def (~ (symbol$ ["" def])) (~ (symbol$ [m-name def]))))))
@@ -2737,10 +2744,9 @@
(wrap (list:join output')))
_
- (wrap (: (List AST)
- (list:++ (map (lambda [m-name] (` (_lux_import (~ (text$ m-name)))))
- unknowns)
- (list (` (import (~@ tokens))))))))))
+ (wrap (list:++ (map (: (-> Text AST) (lambda [m-name] (` (_lux_import (~ (text$ m-name))))))
+ unknowns)
+ (: (List AST) (list (` (import (~@ tokens))))))))))
(def (try-both f x1 x2)
(All [a b]
@@ -2877,7 +2883,7 @@
(case tokens
(\ (list struct body))
(case struct
- (#Meta _ (#SymbolS name))
+ [_ (#SymbolS name)]
(do Lux/Monad
[struct-type (find-var-type name)
output (resolve-type-tags struct-type)]
@@ -2939,7 +2945,7 @@
(defmacro #export (get@ tokens)
(case tokens
- (\ (list (#Meta _ (#TagS slot')) record))
+ (\ (list [_ (#TagS slot')] record))
(do Lux/Monad
[slot (normalize slot')
output (resolve-tag slot)
@@ -2981,11 +2987,11 @@
(defmacro #export (open tokens)
(case tokens
- (\ (list& (#Meta _ (#SymbolS struct-name)) tokens'))
+ (\ (list& [_ (#SymbolS struct-name)] tokens'))
(do Lux/Monad
[@module get-module-name
#let [prefix (case tokens'
- (\ (list (#Meta _ (#TextS prefix))))
+ (\ (list [_ (#TextS prefix)]))
prefix
_
@@ -3028,12 +3034,12 @@
(: (-> AST AST (Lux AST))
(lambda [so-far part]
(case part
- (#Meta _ (#SymbolS slot))
- (return (` (get@ (~ (tag$ slot)) (~ so-far))))
+ [_ (#SymbolS slot)]
+ (return (: AST (` (get@ (~ (tag$ slot)) (~ so-far)))))
- (\ (#Meta _ (#FormS (list& (#Meta _ (#SymbolS slot)) args))))
- (return (` ((get@ (~ (tag$ slot)) (~ so-far))
- (~@ args))))
+ (\ [_ (#FormS (list& [_ (#SymbolS slot)] args))])
+ (return (: AST (` ((get@ (~ (tag$ slot)) (~ so-far))
+ (~@ args)))))
_
(fail "Wrong syntax for ::"))))
@@ -3045,7 +3051,7 @@
(defmacro #export (set@ tokens)
(case tokens
- (\ (list (#Meta _ (#TagS slot')) value record))
+ (\ (list [_ (#TagS slot')] value record))
(do Lux/Monad
[slot (normalize slot')
output (resolve-tag slot)
@@ -3080,7 +3086,7 @@
(defmacro #export (update@ tokens)
(case tokens
- (\ (list (#Meta _ (#TagS slot')) fun record))
+ (\ (list [_ (#TagS slot')] fun record))
(do Lux/Monad
[slot (normalize slot')
output (resolve-tag slot)
@@ -3115,9 +3121,9 @@
(defmacro #export (\template tokens)
(case tokens
- (\ (list (#Meta _ (#TupleS data))
- (#Meta _ (#TupleS bindings))
- (#Meta _ (#TupleS templates))))
+ (\ (list [_ (#TupleS data)]
+ [_ (#TupleS bindings)]
+ [_ (#TupleS templates)]))
(case (: (Maybe (List AST))
(do Maybe/Monad
[bindings' (map% Maybe/Monad get-name bindings)
@@ -3194,7 +3200,7 @@
(defmacro #export (loop tokens)
(case tokens
- (\ (list (#Meta _ (#TupleS bindings)) body))
+ (\ (list [_ (#TupleS bindings)] body))
(let [pairs (as-pairs bindings)
vars (map first pairs)
inits (map second pairs)]
@@ -3224,11 +3230,11 @@
(fail "Wrong syntax for loop")))
(defmacro #export (export tokens)
- (return (map (lambda [token] (` (_lux_export (~ token)))) tokens)))
+ (return (map (: (-> AST AST) (lambda [token] (` (_lux_export (~ token))))) tokens)))
(defmacro #export (\slots tokens)
(case tokens
- (\ (list body (#Meta _ (#TupleS (list& hslot' tslots')))))
+ (\ (list body [_ (#TupleS (list& hslot' tslots'))]))
(do Lux/Monad
[slots (: (Lux (, Ident (List Ident)))
(case (: (Maybe (, Ident (List Ident)))
diff --git a/source/lux/codata/stream.lux b/source/lux/codata/stream.lux
index b4c0e0239..5415213d7 100644
--- a/source/lux/codata/stream.lux
+++ b/source/lux/codata/stream.lux
@@ -128,5 +128,5 @@
#let [patterns+ (: (List AST)
(do List/Monad
[pattern (l;reverse patterns)]
- (list (` [(~ pattern) (~ g!s)]) (` (L;! (~ g!s))))))]]
+ (: (List AST) (list (` [(~ pattern) (~ g!s)]) (` (L;! (~ g!s)))))))]]
(wrap (list g!s (` (;let [(~@ patterns+)] (~ body)))))))
diff --git a/source/lux/control/comonad.lux b/source/lux/control/comonad.lux
index 6225af338..052b8768d 100644
--- a/source/lux/control/comonad.lux
+++ b/source/lux/control/comonad.lux
@@ -29,12 +29,12 @@
## [Syntax]
(defmacro #export (be tokens state)
(case tokens
- (\ (list monad (#;Meta [_ (#;TupleS bindings)]) body))
+ (\ (list monad [_ (#;TupleS bindings)] body))
(let [body' (foldL (: (-> AST (, AST AST) AST)
(lambda [body' binding]
(let [[var value] binding]
(case var
- (#;Meta [_ (#;TagS ["" "let"])])
+ [_ (#;TagS ["" "let"])]
(` (;let (~ value) (~ body')))
_
diff --git a/source/lux/control/dict.lux b/source/lux/control/dict.lux
deleted file mode 100644
index 0b2069cf3..000000000
--- a/source/lux/control/dict.lux
+++ /dev/null
@@ -1,18 +0,0 @@
-## Copyright (c) Eduardo Julian. All rights reserved.
-## This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
-## If a copy of the MPL was not distributed with this file,
-## You can obtain one at http://mozilla.org/MPL/2.0/.
-
-(;import lux)
-
-## Signatures
-(defsig #export (Dict d)
- (: (All [k v]
- (-> k (d k v) (Maybe v)))
- get)
- (: (All [k v]
- (-> k v (d k v) (d k v)))
- put)
- (: (All [k v]
- (-> k (d k v) (d k v)))
- remove))
diff --git a/source/lux/control/monad.lux b/source/lux/control/monad.lux
index 707bf7497..df48da863 100644
--- a/source/lux/control/monad.lux
+++ b/source/lux/control/monad.lux
@@ -50,15 +50,15 @@
## [Syntax]
(defmacro #export (do tokens state)
(case tokens
- ## (\ (list monad (#;Meta [_ (#;TupleS bindings)]) body))
- (#;Cons [monad (#;Cons [(#;Meta [_ (#;TupleS bindings)]) (#;Cons [body #;Nil])])])
+ ## (\ (list monad [_ (#;TupleS bindings)] body))
+ (#;Cons [monad (#;Cons [[_ (#;TupleS bindings)] (#;Cons [body #;Nil])])])
(let [g!map (symbol$ ["" " map "])
g!join (symbol$ ["" " join "])
body' (foldL (: (-> AST (, AST AST) AST)
(lambda [body' binding]
(let [[var value] binding]
(case var
- (#;Meta [_ (#;TagS ["" "let"])])
+ [_ (#;TagS ["" "let"])]
(` (;let (~ value) (~ body')))
_
diff --git a/source/lux/control/stack.lux b/source/lux/control/stack.lux
deleted file mode 100644
index 206ab5cd7..000000000
--- a/source/lux/control/stack.lux
+++ /dev/null
@@ -1,20 +0,0 @@
-## Copyright (c) Eduardo Julian. All rights reserved.
-## This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
-## If a copy of the MPL was not distributed with this file,
-## You can obtain one at http://mozilla.org/MPL/2.0/.
-
-(;import lux)
-
-## [Signatures]
-(defsig #export (Stack s)
- (: (All [a] (s a))
- empty)
- (: (All [a] (-> (s a) Bool))
- empty?)
- (: (All [a] (-> a (s a) (s a)))
- push)
- (: (All [a] (-> (s a) (Maybe (s a))))
- pop)
- (: (All [a] (-> (s a) (Maybe a)))
- top)
- )
diff --git a/source/lux/data/list.lux b/source/lux/data/list.lux
index 1277fc6ae..10bbb8086 100644
--- a/source/lux/data/list.lux
+++ b/source/lux/data/list.lux
@@ -8,9 +8,7 @@
(functor #as F #refer #all)
(monad #as M #refer #all)
(eq #as E)
- (ord #as O)
- (dict #as D #refer #all)
- (stack #as S))
+ (ord #as O))
(data (number (int #open ("i" Int/Number Int/Ord)))
bool)
meta/macro))
@@ -20,15 +18,6 @@
## (| #Nil
## (#Cons (, a (List a)))))
-(deftype #export (PList k v)
- (| (#PList (, (E;Eq k) (List (, k v))))))
-
-## [Constructors]
-(def #export (plist eq)
- (All [k v]
- (-> (E;Eq k) (PList k v)))
- (#PList [eq #;Nil]))
-
## [Functions]
(def #export (foldL f init xs)
(All [a b]
@@ -225,17 +214,19 @@
## [Syntax]
(defmacro #export (list xs state)
- (#;Right [state (#;Cons [(foldL (lambda [tail head]
- (` (#;Cons [(~ head) (~ tail)])))
- (` #;Nil)
+ (#;Right [state (#;Cons [(foldL (: (-> AST AST AST)
+ (lambda [tail head]
+ (` (#;Cons [(~ head) (~ tail)]))))
+ (: AST (` #;Nil))
(reverse xs))
#;Nil])]))
(defmacro #export (list& xs state)
(case (reverse xs)
(#;Cons [last init])
- (#;Right [state (list (foldL (lambda [tail head]
- (` (#;Cons [(~ head) (~ tail)])))
+ (#;Right [state (list (foldL (: (-> AST AST AST)
+ (lambda [tail head]
+ (` (#;Cons [(~ head) (~ tail)]))))
last
init))])
@@ -281,57 +272,6 @@
(using List/Monoid
(foldL ++ unit mma))))
-(defstruct #export PList/Dict (Dict PList)
- (def (D;get k (#PList [eq kvs]))
- (loop [kvs kvs]
- (case kvs
- #;Nil
- #;None
-
- (#;Cons [k' v'] kvs')
- (if (:: eq (E;= k k'))
- (#;Some v')
- (recur kvs')))))
-
- (def (D;put k v (#PList [eq kvs]))
- (#PList [eq (loop [kvs kvs]
- (case kvs
- #;Nil
- (#;Cons [k v] kvs)
-
- (#;Cons [k' v'] kvs')
- (if (:: eq (E;= k k'))
- (#;Cons [k v] kvs')
- (#;Cons [k' v'] (recur kvs')))))]))
-
- (def (D;remove k (#PList [eq kvs]))
- (#PList [eq (loop [kvs kvs]
- (case kvs
- #;Nil
- kvs
-
- (#;Cons [[k' v'] kvs'])
- (if (:: eq (E;= k k'))
- kvs'
- (#;Cons [[k' v'] (recur kvs')]))))])))
-
-(defstruct #export List/Stack (S;Stack List)
- (def S;empty (list))
- (def (S;empty? xs)
- (case xs
- #;Nil true
- _ false))
- (def (S;push x xs)
- (#;Cons x xs))
- (def (S;pop xs)
- (case xs
- #;Nil #;None
- (#;Cons x xs') (#;Some xs')))
- (def (S;top xs)
- (case xs
- #;Nil #;None
- (#;Cons x xs') (#;Some x))))
-
## [Functions]
(def #export (sort ord xs)
(All [a] (-> (O;Ord a) (List a) (List a)))
diff --git a/source/lux/data/text.lux b/source/lux/data/text.lux
index 3801e9675..0040a96c5 100644
--- a/source/lux/data/text.lux
+++ b/source/lux/data/text.lux
@@ -166,7 +166,7 @@
(defmacro #export (<> tokens state)
(case tokens
- (\ (list (#;Meta _ (#;TextS template))))
+ (\ (list [_ (#;TextS template)]))
(let [++ (symbol$ ["" ""])]
(#;Right state (list (` (;let [(~ ++) (;:: Text/Monoid m;++)]
(;$ (~ ++) (~@ (unravel-template template))))))))
diff --git a/source/lux/host/jvm.lux b/source/lux/host/jvm.lux
index 9795965bd..40021d8fa 100644
--- a/source/lux/host/jvm.lux
+++ b/source/lux/host/jvm.lux
@@ -96,7 +96,7 @@
(list)
(#;Some finally)
- (list (` (_jvm_finally (~ finally)))))))))))))
+ (: (List AST) (list (` (_jvm_finally (~ finally))))))))))))))
(defsyntax #export (definterface [name local-symbol^] [supers (tuple^ (*^ local-symbol^))] [members (*^ method-decl^)])
(let [members' (map (: (-> (, (List Text) Text (List Text) Text) AST)
@@ -166,7 +166,7 @@
(defsyntax #export (.? [field local-symbol^] obj)
(case obj
- (#;Meta [_ (#;SymbolS obj-name)])
+ [_ (#;SymbolS obj-name)]
(do Lux/Monad
[obj-type (find-var-type obj-name)]
(case obj-type
@@ -184,7 +184,7 @@
(defsyntax #export (.= [field local-symbol^] value obj)
(case obj
- (#;Meta [_ (#;SymbolS obj-name)])
+ [_ (#;SymbolS obj-name)]
(do Lux/Monad
[obj-type (find-var-type obj-name)]
(case obj-type
@@ -203,7 +203,7 @@
(defsyntax #export (.! [call method-call^] obj)
(let [[m-name ?m-classes m-args] call]
(case obj
- (#;Meta [_ (#;SymbolS obj-name)])
+ [_ (#;SymbolS obj-name)]
(do Lux/Monad
[obj-type (find-var-type obj-name)]
(case obj-type
diff --git a/source/lux/meta/ast.lux b/source/lux/meta/ast.lux
index ecf7d6e6e..a601739a1 100644
--- a/source/lux/meta/ast.lux
+++ b/source/lux/meta/ast.lux
@@ -28,7 +28,7 @@
(do-template [<name> <type> <tag>]
[(def #export (<name> x)
(-> <type> AST)
- (#;Meta _cursor (<tag> x)))]
+ [_cursor (<tag> x)])]
[bool$ Bool #;BoolS]
[int$ Int #;IntS]
diff --git a/source/lux/meta/lux.lux b/source/lux/meta/lux.lux
index 8a0ec5f46..92c43bbee 100644
--- a/source/lux/meta/lux.lux
+++ b/source/lux/meta/lux.lux
@@ -119,7 +119,7 @@
(def #export (macro-expand syntax)
(-> AST (Lux (List AST)))
(case syntax
- (#;Meta [_ (#;FormS (#;Cons [(#;Meta [_ (#;SymbolS macro-name)]) args]))])
+ [_ (#;FormS (#;Cons [[_ (#;SymbolS macro-name)] args]))]
(do Lux/Monad
[macro-name' (normalize macro-name)
?macro (find-macro macro-name')]
@@ -139,7 +139,7 @@
(def #export (macro-expand-all syntax)
(-> AST (Lux (List AST)))
(case syntax
- (#;Meta [_ (#;FormS (#;Cons [(#;Meta [_ (#;SymbolS macro-name)]) args]))])
+ [_ (#;FormS (#;Cons [[_ (#;SymbolS macro-name)] args]))]
(do Lux/Monad
[macro-name' (normalize macro-name)
?macro (find-macro macro-name')]
@@ -155,13 +155,13 @@
[parts' (M;map% Lux/Monad macro-expand-all (list& (symbol$ macro-name) args))]
(wrap (list (form$ (:: List/Monad (M;join parts'))))))))
- (#;Meta [_ (#;FormS (#;Cons [harg targs]))])
+ [_ (#;FormS (#;Cons [harg targs]))]
(do Lux/Monad
[harg+ (macro-expand-all harg)
targs+ (M;map% Lux/Monad macro-expand-all targs)]
(wrap (list (form$ (list:++ harg+ (:: List/Monad (M;join (: (List (List AST)) targs+))))))))
- (#;Meta [_ (#;TupleS members)])
+ [_ (#;TupleS members)]
(do Lux/Monad
[members' (M;map% Lux/Monad macro-expand-all members)]
(wrap (list (tuple$ (:: List/Monad (M;join members'))))))
diff --git a/source/lux/meta/macro.lux b/source/lux/meta/macro.lux
index bfc274e59..f554f45b4 100644
--- a/source/lux/meta/macro.lux
+++ b/source/lux/meta/macro.lux
@@ -9,18 +9,18 @@
(def #export (defmacro tokens state)
Macro
(case tokens
- (#;Cons [(#;Meta [_ (#;FormS (#;Cons [name args]))]) (#;Cons [body #;Nil])])
- (#;Right [state (#;Cons [(` ((~ (#;Meta ["" -1 -1] (#;SymbolS ["lux" "def"]))) ((~ name) (~@ args))
- (~ (#;Meta ["" -1 -1] (#;SymbolS ["lux" "Macro"])))
+ (#;Cons [[_ (#;FormS (#;Cons [name args]))] (#;Cons [body #;Nil])])
+ (#;Right [state (#;Cons [(` ((~ [["" -1 -1] (#;SymbolS ["lux" "def"])]) ((~ name) (~@ args))
+ (~ [["" -1 -1] (#;SymbolS ["lux" "Macro"])])
(~ body)))
- (#;Cons [(` ((~ (#;Meta ["" -1 -1] (#;SymbolS ["" "_lux_declare-macro"]))) (~ name)))
+ (#;Cons [(` ((~ [["" -1 -1] (#;SymbolS ["" "_lux_declare-macro"])]) (~ name)))
#;Nil])])])
- (#;Cons [(#;Meta [_ (#;TagS ["" "export"])]) (#;Cons [(#;Meta [_ (#;FormS (#;Cons [name args]))]) (#;Cons [body #;Nil])])])
- (#;Right [state (#;Cons [(` ((~ (#;Meta ["" -1 -1] (#;SymbolS ["lux" "def"]))) (~ (#;Meta ["" -1 -1] (#;TagS ["" "export"]))) ((~ name) (~@ args))
- (~ (#;Meta ["" -1 -1] (#;SymbolS ["lux" "Macro"])))
+ (#;Cons [[_ (#;TagS ["" "export"])] (#;Cons [[_ (#;FormS (#;Cons [name args]))] (#;Cons [body #;Nil])])])
+ (#;Right [state (#;Cons [(` ((~ [["" -1 -1] (#;SymbolS ["lux" "def"])]) (~ [["" -1 -1] (#;TagS ["" "export"])]) ((~ name) (~@ args))
+ (~ [["" -1 -1] (#;SymbolS ["lux" "Macro"])])
(~ body)))
- (#;Cons [(` ((~ (#;Meta ["" -1 -1] (#;SymbolS ["" "_lux_declare-macro"]))) (~ name)))
+ (#;Cons [(` ((~ [["" -1 -1] (#;SymbolS ["" "_lux_declare-macro"])]) (~ name)))
#;Nil])])])
_
diff --git a/source/lux/meta/syntax.lux b/source/lux/meta/syntax.lux
index c7f691389..1732350ce 100644
--- a/source/lux/meta/syntax.lux
+++ b/source/lux/meta/syntax.lux
@@ -70,7 +70,7 @@
[(def #export (<name> tokens)
(Parser <type>)
(case tokens
- (#;Cons [(#;Meta [_ (<tag> x)]) tokens'])
+ (#;Cons [[_ (<tag> x)] tokens'])
(#;Some [tokens' x])
_
@@ -89,7 +89,7 @@
[(def #export (<name> tokens)
(Parser Text)
(case tokens
- (#;Cons [(#;Meta [_ (<tag> ["" x])]) tokens'])
+ (#;Cons [[_ (<tag> ["" x])] tokens'])
(#;Some [tokens' x])
_
@@ -110,7 +110,7 @@
[(def #export (<name> v tokens)
(-> <type> (Parser (,)))
(case tokens
- (#;Cons [(#;Meta [_ (<tag> x)]) tokens'])
+ (#;Cons [[_ (<tag> x)] tokens'])
(if (<eq> v x)
(#;Some [tokens' []])
#;None)
@@ -132,7 +132,7 @@
(All [a]
(-> (Parser a) (Parser a)))
(case tokens
- (#;Cons [(#;Meta [_ (<tag> form)]) tokens'])
+ (#;Cons [[_ (<tag> form)] tokens'])
(case (p form)
(#;Some [#;Nil x]) (#;Some [tokens' x])
_ #;None)
@@ -212,24 +212,24 @@
(defmacro #export (defsyntax tokens)
(let [[exported? tokens] (: (, Bool (List AST))
(case tokens
- (\ (list& (#;Meta [_ (#;TagS ["" "export"])]) tokens'))
+ (\ (list& [_ (#;TagS ["" "export"])] tokens'))
[true tokens']
_
[false tokens]))]
(case tokens
- (\ (list (#;Meta [_ (#;FormS (list& (#;Meta [_ (#;SymbolS ["" name])]) args))])
+ (\ (list [_ (#;FormS (list& [_ (#;SymbolS ["" name])] args))]
body))
(do Lux/Monad
[names+parsers (M;map% Lux/Monad
(: (-> AST (Lux (, AST AST)))
(lambda [arg]
(case arg
- (\ (#;Meta [_ (#;TupleS (list (#;Meta [_ (#;SymbolS var-name)])
- parser))]))
+ (\ [_ (#;TupleS (list [_ (#;SymbolS var-name)]
+ parser))])
(wrap [(symbol$ var-name) parser])
- (\ (#;Meta [_ (#;SymbolS var-name)]))
+ (\ [_ (#;SymbolS var-name)])
(wrap [(symbol$ var-name) (` id^)])
_
diff --git a/src/lux/analyser.clj b/src/lux/analyser.clj
index 7e5024c40..3ff214ee0 100644
--- a/src/lux/analyser.clj
+++ b/src/lux/analyser.clj
@@ -20,16 +20,16 @@
;; [Utils]
(defn ^:private parse-handler [[catch+ finally+] token]
(|case token
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_catch"))
- (&/$Cons (&/$Meta _ (&/$TextS ?ex-class))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?ex-arg))
- (&/$Cons ?catch-body
- (&/$Nil)))))))
+ [meta (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_catch")]
+ (&/$Cons [_ (&/$TextS ?ex-class)]
+ (&/$Cons [_ (&/$SymbolS "" ?ex-arg)]
+ (&/$Cons ?catch-body
+ (&/$Nil))))))]
(return (&/T (&/|++ catch+ (&/|list (&/T ?ex-class ?ex-arg ?catch-body))) finally+))
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_finally"))
- (&/$Cons ?finally-body
- (&/$Nil)))))
+ [meta (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_finally")]
+ (&/$Cons ?finally-body
+ (&/$Nil))))]
(return (&/T catch+ (&/V &/$Some ?finally-body)))
_
@@ -37,7 +37,7 @@
(defn ^:private parse-tag [ast]
(|case ast
- (&/$Meta _ (&/$TagS "" name))
+ [_ (&/$TagS "" name)]
(return name)
_
@@ -46,44 +46,44 @@
(defn ^:private aba7 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Arrays
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_new-array"))
- (&/$Cons (&/$Meta _ (&/$SymbolS _ ?class))
- (&/$Cons (&/$Meta _ (&/$IntS ?length))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_new-array")]
+ (&/$Cons [_ (&/$SymbolS _ ?class)]
+ (&/$Cons [_ (&/$IntS ?length)]
(&/$Nil)))))
(&&host/analyse-jvm-new-array analyse ?class ?length)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_aastore"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_aastore")]
(&/$Cons ?array
- (&/$Cons (&/$Meta _ (&/$IntS ?idx))
+ (&/$Cons [_ (&/$IntS ?idx)]
(&/$Cons ?elem
(&/$Nil))))))
(&&host/analyse-jvm-aastore analyse ?array ?idx ?elem)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_aaload"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_aaload")]
(&/$Cons ?array
- (&/$Cons (&/$Meta _ (&/$IntS ?idx))
+ (&/$Cons [_ (&/$IntS ?idx)]
(&/$Nil)))))
(&&host/analyse-jvm-aaload analyse ?array ?idx)
;; Classes & interfaces
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_class"))
- (&/$Cons (&/$Meta _ (&/$TextS ?name))
- (&/$Cons (&/$Meta _ (&/$TextS ?super-class))
- (&/$Cons (&/$Meta _ (&/$TupleS ?interfaces))
- (&/$Cons (&/$Meta _ (&/$TupleS ?fields))
- (&/$Cons (&/$Meta _ (&/$TupleS ?methods))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_class")]
+ (&/$Cons [_ (&/$TextS ?name)]
+ (&/$Cons [_ (&/$TextS ?super-class)]
+ (&/$Cons [_ (&/$TupleS ?interfaces)]
+ (&/$Cons [_ (&/$TupleS ?fields)]
+ (&/$Cons [_ (&/$TupleS ?methods)]
(&/$Nil))))))))
(&&host/analyse-jvm-class analyse compile-token ?name ?super-class ?interfaces ?fields ?methods)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_interface"))
- (&/$Cons (&/$Meta _ (&/$TextS ?name))
- (&/$Cons (&/$Meta _ (&/$TupleS ?supers))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_interface")]
+ (&/$Cons [_ (&/$TextS ?name)]
+ (&/$Cons [_ (&/$TupleS ?supers)]
?methods))))
(&&host/analyse-jvm-interface analyse compile-token ?name ?supers ?methods)
;; Programs
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_program"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?args))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_program")]
+ (&/$Cons [_ (&/$SymbolS "" ?args)]
(&/$Cons ?body
(&/$Nil)))))
(&&host/analyse-jvm-program analyse compile-token ?args ?body)
@@ -94,86 +94,86 @@
(defn ^:private aba6 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Primitive conversions
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_d2f")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_d2f")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-d2f analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_d2i")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_d2i")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-d2i analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_d2l")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_d2l")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-d2l analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_f2d")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_f2d")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-f2d analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_f2i")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_f2i")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-f2i analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_f2l")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_f2l")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-f2l analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2b")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2b")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2b analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2c")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2c")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2c analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2d")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2d")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2d analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2f")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2f")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2f analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2l")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2l")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2l analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2s")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2s")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2s analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_l2d")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_l2d")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-l2d analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_l2f")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_l2f")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-l2f analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_l2i")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_l2i")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-l2i analyse exo-type ?value)
;; Bitwise operators
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_iand")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_iand")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-iand analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ior")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ior")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ior analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ixor")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ixor")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ixor analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ishl")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ishl")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ishl analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ishr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ishr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ishr analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_iushr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_iushr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-iushr analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_land")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_land")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-land analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lor")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lor")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lor analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lxor")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lxor")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lxor analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lshl")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lshl")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lshl analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lshr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lshr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lshr analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lushr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lushr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lushr analyse exo-type ?x ?y)
_
@@ -182,106 +182,106 @@
(defn ^:private aba5 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Objects
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_null?"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_null?")]
(&/$Cons ?object
(&/$Nil))))
(&&host/analyse-jvm-null? analyse exo-type ?object)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_instanceof"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_instanceof")]
+ (&/$Cons [_ (&/$TextS ?class)]
(&/$Cons ?object
(&/$Nil)))))
(&&host/analyse-jvm-instanceof analyse exo-type ?class ?object)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_new"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_new")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))
(&&host/analyse-jvm-new analyse exo-type ?class ?classes ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_getstatic"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_getstatic")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Nil)))))
(&&host/analyse-jvm-getstatic analyse exo-type ?class ?field)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_getfield"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_getfield")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Cons ?object
(&/$Nil))))))
(&&host/analyse-jvm-getfield analyse exo-type ?class ?field ?object)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_putstatic"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_putstatic")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Cons ?value
(&/$Nil))))))
(&&host/analyse-jvm-putstatic analyse exo-type ?class ?field ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_putfield"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_putfield")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Cons ?object
(&/$Cons ?value
(&/$Nil)))))))
(&&host/analyse-jvm-putfield analyse exo-type ?class ?field ?object ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokestatic"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokestatic")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil)))))))
(&&host/analyse-jvm-invokestatic analyse exo-type ?class ?method ?classes ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokevirtual"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokevirtual")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
(&/$Cons ?object
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))))
(&&host/analyse-jvm-invokevirtual analyse exo-type ?class ?method ?classes ?object ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokeinterface"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokeinterface")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
(&/$Cons ?object
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))))
(&&host/analyse-jvm-invokeinterface analyse exo-type ?class ?method ?classes ?object ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokespecial"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokespecial")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
(&/$Cons ?object
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))))
(&&host/analyse-jvm-invokespecial analyse exo-type ?class ?method ?classes ?object ?args)
;; Exceptions
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_try"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_try")]
(&/$Cons ?body
?handlers)))
(|do [catches+finally (&/fold% parse-handler (&/T (&/|list) (&/V &/$None nil)) ?handlers)]
(&&host/analyse-jvm-try analyse exo-type ?body catches+finally))
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_throw"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_throw")]
(&/$Cons ?ex
(&/$Nil))))
(&&host/analyse-jvm-throw analyse exo-type ?ex)
;; Syncronization/monitos
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_monitorenter"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_monitorenter")]
(&/$Cons ?monitor
(&/$Nil))))
(&&host/analyse-jvm-monitorenter analyse exo-type ?monitor)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_monitorexit"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_monitorexit")]
(&/$Cons ?monitor
(&/$Nil))))
(&&host/analyse-jvm-monitorexit analyse exo-type ?monitor)
@@ -292,53 +292,53 @@
(defn ^:private aba4 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Float arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fadd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fadd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fadd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fsub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fsub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fsub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fmul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fmul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fmul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fdiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fdiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fdiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_frem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_frem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-frem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_feq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_feq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-feq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_flt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_flt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-flt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fgt analyse exo-type ?x ?y)
;; Double arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dadd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dadd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dadd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dsub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dsub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dsub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dmul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dmul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dmul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ddiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ddiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ddiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_drem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_drem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-drem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_deq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_deq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-deq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dlt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dlt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dlt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dgt analyse exo-type ?x ?y)
_
@@ -348,63 +348,63 @@
(|case token
;; Host special forms
;; Characters
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ceq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ceq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ceq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_clt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_clt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-clt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_cgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_cgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-cgt analyse exo-type ?x ?y)
;; Integer arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_iadd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_iadd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-iadd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_isub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_isub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-isub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_imul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_imul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-imul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_idiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_idiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-idiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_irem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_irem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-irem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ieq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ieq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ieq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ilt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ilt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ilt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_igt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_igt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-igt analyse exo-type ?x ?y)
;; Long arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ladd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ladd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ladd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lsub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lsub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lsub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lmul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lmul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lmul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ldiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ldiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ldiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lrem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lrem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lrem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_leq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_leq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-leq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_llt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_llt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-llt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lgt analyse exo-type ?x ?y)
_
@@ -415,60 +415,60 @@
(&/$SymbolS ?ident)
(&&lux/analyse-symbol analyse exo-type ?ident)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_case"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_case")]
(&/$Cons ?value ?branches)))
(&&lux/analyse-case analyse exo-type ?value ?branches)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_lambda"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?self))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?arg))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_lambda")]
+ (&/$Cons [_ (&/$SymbolS "" ?self)]
+ (&/$Cons [_ (&/$SymbolS "" ?arg)]
(&/$Cons ?body
(&/$Nil))))))
(&&lux/analyse-lambda analyse exo-type ?self ?arg ?body)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_def"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?name))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_def")]
+ (&/$Cons [_ (&/$SymbolS "" ?name)]
(&/$Cons ?value
(&/$Nil)))))
(&&lux/analyse-def analyse compile-token ?name ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_declare-macro"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?name))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_declare-macro")]
+ (&/$Cons [_ (&/$SymbolS "" ?name)]
(&/$Nil))))
(&&lux/analyse-declare-macro analyse compile-token ?name)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_declare-tags"))
- (&/$Cons (&/$Meta _ (&/$TupleS tags))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" type-name))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_declare-tags")]
+ (&/$Cons [_ (&/$TupleS tags)]
+ (&/$Cons [_ (&/$SymbolS "" type-name)]
(&/$Nil)))))
(|do [tags* (&/map% parse-tag tags)]
(&&lux/analyse-declare-tags tags* type-name))
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_import"))
- (&/$Cons (&/$Meta _ (&/$TextS ?path))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_import")]
+ (&/$Cons [_ (&/$TextS ?path)]
(&/$Nil))))
(&&lux/analyse-import analyse compile-module compile-token ?path)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_:"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_:")]
(&/$Cons ?type
(&/$Cons ?value
(&/$Nil)))))
(&&lux/analyse-check analyse eval! exo-type ?type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_:!"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_:!")]
(&/$Cons ?type
(&/$Cons ?value
(&/$Nil)))))
(&&lux/analyse-coerce analyse eval! exo-type ?type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_export"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?ident))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_export")]
+ (&/$Cons [_ (&/$SymbolS "" ?ident)]
(&/$Nil))))
(&&lux/analyse-export analyse compile-token ?ident)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_alias"))
- (&/$Cons (&/$Meta _ (&/$TextS ?alias))
- (&/$Cons (&/$Meta _ (&/$TextS ?module))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_alias")]
+ (&/$Cons [_ (&/$TextS ?alias)]
+ (&/$Cons [_ (&/$TextS ?module)]
(&/$Nil)))))
(&&lux/analyse-alias analyse compile-token ?alias ?module)
@@ -525,7 +525,7 @@
(defn ^:private analyse-basic-ast [analyse eval! compile-module compile-token exo-type token]
;; (prn 'analyse-basic-ast (&/show-ast token))
(|case token
- (&/$Meta meta ?token)
+ [meta ?token]
(fn [state]
(|case (try ((aba1 analyse eval! compile-module compile-token exo-type ?token) state)
(catch Error e
@@ -559,13 +559,13 @@
(defn ^:private analyse-ast [eval! compile-module compile-token exo-type token]
;; (prn 'analyse-ast (&/show-ast token))
- (&/with-cursor (aget token 1 0)
+ (&/with-cursor (aget token 0)
(&/with-expected-type exo-type
(|case token
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$IntS idx)) ?values)))
+ [meta (&/$FormS (&/$Cons [_ (&/$IntS idx)] ?values))]
(&&lux/analyse-variant (partial analyse-ast eval! compile-module compile-token) exo-type idx ?values)
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$TagS ?ident)) ?values)))
+ [meta (&/$FormS (&/$Cons [_ (&/$TagS ?ident)] ?values))]
(|do [;; :let [_ (println 'analyse-ast/_0 (&/ident->text ?ident))]
[module tag-name] (&/normalize ?ident)
;; :let [_ (println 'analyse-ast/_1 (&/ident->text (&/T module tag-name)))]
@@ -574,7 +574,7 @@
]
(&&lux/analyse-variant (partial analyse-ast eval! compile-module compile-token) exo-type idx ?values))
- (&/$Meta meta (&/$FormS (&/$Cons ?fn ?args)))
+ [meta (&/$FormS (&/$Cons ?fn ?args))]
(fn [state]
(|case ((just-analyse (partial analyse-ast eval! compile-module compile-token) ?fn) state)
(&/$Right state* =fn)
diff --git a/src/lux/analyser/case.clj b/src/lux/analyser/case.clj
index 829b5b6d8..e86d55497 100644
--- a/src/lux/analyser/case.clj
+++ b/src/lux/analyser/case.clj
@@ -39,7 +39,7 @@
;; [Utils]
(def ^:private unit
- (&/V &/$Meta (&/T (&/T "" -1 -1) (&/V &/$TupleS (&/|list)))))
+ (&/T (&/T "" -1 -1) (&/V &/$TupleS (&/|list))))
(defn ^:private resolve-type [type]
(|case type
@@ -126,7 +126,7 @@
(adjust-type* (&/|list) type))
(defn ^:private analyse-pattern [value-type pattern kont]
- (|let [(&/$Meta _ pattern*) pattern]
+ (|let [[_ pattern*] pattern]
(|case pattern*
(&/$SymbolS "" name)
(|do [=kont (&env/with-local name value-type
@@ -221,7 +221,7 @@
]
(return (&/T (&/V $VariantTestAC (&/T idx (&/|length group) =test)) =kont)))
- (&/$FormS (&/$Cons (&/$Meta _ (&/$TagS ?ident))
+ (&/$FormS (&/$Cons [_ (&/$TagS ?ident)]
?values))
(|do [;; :let [_ (println "#10" (&/ident->text ?ident))]
[=module =name] (&&/resolved-ident ?ident)
@@ -237,7 +237,7 @@
0 (analyse-pattern case-type unit kont)
1 (analyse-pattern case-type (&/|head ?values) kont)
;; 1+
- (analyse-pattern case-type (&/V &/$Meta (&/T (&/T "" -1 -1) (&/V &/$TupleS ?values))) kont))
+ (analyse-pattern case-type (&/T (&/T "" -1 -1) (&/V &/$TupleS ?values)) kont))
;; :let [_ (println "#15")]
]
(return (&/T (&/V $VariantTestAC (&/T idx (&/|length group) =test)) =kont)))
diff --git a/src/lux/analyser/host.clj b/src/lux/analyser/host.clj
index 098dc89df..796b2d147 100644
--- a/src/lux/analyser/host.clj
+++ b/src/lux/analyser/host.clj
@@ -17,7 +17,7 @@
;; [Utils]
(defn ^:private extract-text [text]
(|case text
- (&/$Meta _ (&/$TextS ?text))
+ [_ (&/$TextS ?text)]
(return ?text)
_
@@ -221,28 +221,28 @@
(defn ^:private analyse-modifiers [modifiers]
(&/fold% (fn [so-far modif]
(|case modif
- (&/$Meta _ (&/$TextS "public"))
+ [_ (&/$TextS "public")]
(return (assoc so-far :visibility "public"))
- (&/$Meta _ (&/$TextS "private"))
+ [_ (&/$TextS "private")]
(return (assoc so-far :visibility "private"))
- (&/$Meta _ (&/$TextS "protected"))
+ [_ (&/$TextS "protected")]
(return (assoc so-far :visibility "protected"))
- (&/$Meta _ (&/$TextS "static"))
+ [_ (&/$TextS "static")]
(return (assoc so-far :static? true))
- (&/$Meta _ (&/$TextS "final"))
+ [_ (&/$TextS "final")]
(return (assoc so-far :final? true))
- (&/$Meta _ (&/$TextS "abstract"))
+ [_ (&/$TextS "abstract")]
(return (assoc so-far :abstract? true))
- (&/$Meta _ (&/$TextS "synchronized"))
+ [_ (&/$TextS "synchronized")]
(return (assoc so-far :concurrency "synchronized"))
- (&/$Meta _ (&/$TextS "volatile"))
+ [_ (&/$TextS "volatile")]
(return (assoc so-far :concurrency "volatile"))
_
@@ -272,10 +272,10 @@
(|do [=interfaces (&/map% extract-text ?interfaces)
=fields (&/map% (fn [?field]
(|case ?field
- (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$TextS ?field-name))
- (&/$Cons (&/$Meta _ (&/$TextS ?field-type))
- (&/$Cons (&/$Meta _ (&/$TupleS ?field-modifiers))
- (&/$Nil))))))
+ [_ (&/$FormS (&/$Cons [_ (&/$TextS ?field-name)]
+ (&/$Cons [_ (&/$TextS ?field-type)]
+ (&/$Cons [_ (&/$TupleS ?field-modifiers)]
+ (&/$Nil)))))]
(|do [=field-modifiers (analyse-modifiers ?field-modifiers)]
(return {:name ?field-name
:modifiers =field-modifiers
@@ -286,17 +286,17 @@
?fields)
=methods (&/map% (fn [?method]
(|case ?method
- [?idx (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$TextS ?method-name))
- (&/$Cons (&/$Meta _ (&/$TupleS ?method-inputs))
- (&/$Cons (&/$Meta _ (&/$TextS ?method-output))
- (&/$Cons (&/$Meta _ (&/$TupleS ?method-modifiers))
- (&/$Cons ?method-body
- (&/$Nil))))))))]
+ [?idx [_ (&/$FormS (&/$Cons [_ (&/$TextS ?method-name)]
+ (&/$Cons [_ (&/$TupleS ?method-inputs)]
+ (&/$Cons [_ (&/$TextS ?method-output)]
+ (&/$Cons [_ (&/$TupleS ?method-modifiers)]
+ (&/$Cons ?method-body
+ (&/$Nil)))))))]]
(|do [=method-inputs (&/map% (fn [minput]
(|case minput
- (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS "" ?input-name))
- (&/$Cons (&/$Meta _ (&/$TextS ?input-type))
- (&/$Nil)))))
+ [_ (&/$FormS (&/$Cons [_ (&/$SymbolS "" ?input-name)]
+ (&/$Cons [_ (&/$TextS ?input-type)]
+ (&/$Nil))))]
(return (&/T ?input-name ?input-type))
_
@@ -331,11 +331,11 @@
(|do [=supers (&/map% extract-text ?supers)
=methods (&/map% (fn [method]
(|case method
- (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$TextS ?method-name))
- (&/$Cons (&/$Meta _ (&/$TupleS ?inputs))
- (&/$Cons (&/$Meta _ (&/$TextS ?output))
- (&/$Cons (&/$Meta _ (&/$TupleS ?modifiers))
- (&/$Nil)))))))
+ [_ (&/$FormS (&/$Cons [_ (&/$TextS ?method-name)]
+ (&/$Cons [_ (&/$TupleS ?inputs)]
+ (&/$Cons [_ (&/$TextS ?output)]
+ (&/$Cons [_ (&/$TupleS ?modifiers)]
+ (&/$Nil))))))]
(|do [=inputs (&/map% extract-text ?inputs)
=modifiers (analyse-modifiers ?modifiers)]
(return {:name ?method-name
@@ -361,7 +361,7 @@
=finally (|case [?finally]
(&/$None) (return (&/V &/$None nil))
(&/$Some ?finally*) (|do [=finally (analyse-1+ analyse ?finally*)]
- (return (&/V &/$Some =finally))))]
+ (return (&/V &/$Some =finally))))]
(return (&/|list (&/T (&/V &&/$jvm-try (&/T =body =catches =finally)) exo-type)))))
(defn analyse-jvm-throw [analyse exo-type ?ex]
diff --git a/src/lux/analyser/lux.clj b/src/lux/analyser/lux.clj
index c3f7622b8..375c82f27 100644
--- a/src/lux/analyser/lux.clj
+++ b/src/lux/analyser/lux.clj
@@ -26,11 +26,6 @@
=type (&type/clean $var ?type)]
(return (&/T ?item =type))))))
-(defn ^:private with-cursor [cursor form]
- (|case form
- (&/$Meta _ syntax)
- (&/V &/$Meta (&/T cursor syntax))))
-
;; [Exports]
(defn analyse-tuple [analyse exo-type ?elems]
(|do [exo-type* (&type/actual-type exo-type)]
@@ -275,7 +270,6 @@
(|do [;; :let [_ (prn 'MACRO-EXPAND|PRE (&/ident->text real-name))]
macro-expansion #(-> macro (.apply ?args) (.apply %))
;; :let [_ (prn 'MACRO-EXPAND|POST (&/ident->text real-name))]
- ;; :let [macro-expansion* (&/|map (partial with-cursor form-cursor) macro-expansion)]
;; :let [_ (when (or (= "defsig" (aget real-name 1))
;; ;; (= "type" (aget real-name 1))
;; ;; (= &&/$struct r-name)
diff --git a/src/lux/analyser/record.clj b/src/lux/analyser/record.clj
index c6bfb0053..8b70bbcb4 100644
--- a/src/lux/analyser/record.clj
+++ b/src/lux/analyser/record.clj
@@ -133,7 +133,7 @@
(&/$Nil)
(return (&/|list))
- (&/$Cons [(&/$Meta _ (&/$TagS tag1)) _] _)
+ (&/$Cons [[_ (&/$TagS tag1)] _] _)
(|do [[module name] (&&/resolved-ident tag1)]
(&&module/tag-group module name))
@@ -141,7 +141,7 @@
(fail "[Analyser Error] Wrong syntax for records. Odd elements must be tags."))
=pairs (&/map% (fn [kv]
(|case kv
- [(&/$Meta _ (&/$TagS k)) v]
+ [[_ (&/$TagS k)] v]
(|do [=k (&&/resolved-ident k)]
(return (&/T (&/ident->text =k) v)))
diff --git a/src/lux/base.clj b/src/lux/base.clj
index 5444c6c81..b99437a2c 100644
--- a/src/lux/base.clj
+++ b/src/lux/base.clj
@@ -23,10 +23,6 @@
"None"
"Some")
-;; Meta
-(deftags ""
- "Meta")
-
;; Either
(deftags ""
"Left"
@@ -768,40 +764,40 @@
(defn show-ast [ast]
;; (prn 'show-ast/GOOD (aget ast 0) (aget ast 1 1 0))
(|case ast
- ($Meta _ ($BoolS ?value))
+ [_ ($BoolS ?value)]
(pr-str ?value)
- ($Meta _ ($IntS ?value))
+ [_ ($IntS ?value)]
(pr-str ?value)
- ($Meta _ ($RealS ?value))
+ [_ ($RealS ?value)]
(pr-str ?value)
- ($Meta _ ($CharS ?value))
+ [_ ($CharS ?value)]
(pr-str ?value)
- ($Meta _ ($TextS ?value))
+ [_ ($TextS ?value)]
(str "\"" ?value "\"")
- ($Meta _ ($TagS ?module ?tag))
+ [_ ($TagS ?module ?tag)]
(str "#" ?module ";" ?tag)
- ($Meta _ ($SymbolS ?module ?name))
+ [_ ($SymbolS ?module ?name)]
(if (.equals "" ?module)
?name
(str ?module ";" ?name))
- ($Meta _ ($TupleS ?elems))
+ [_ ($TupleS ?elems)]
(str "[" (->> ?elems (|map show-ast) (|interpose " ") (fold str "")) "]")
- ($Meta _ ($RecordS ?elems))
+ [_ ($RecordS ?elems)]
(str "{" (->> ?elems
(|map (fn [elem]
(|let [[k v] elem]
(str (show-ast k) " " (show-ast v)))))
(|interpose " ") (fold str "")) "}")
- ($Meta _ ($FormS ?elems))
+ [_ ($FormS ?elems)]
(str "(" (->> ?elems (|map show-ast) (|interpose " ") (fold str "")) ")")
_
diff --git a/src/lux/lexer.clj b/src/lux/lexer.clj
index 6f5f2250d..4c7741769 100644
--- a/src/lux/lexer.clj
+++ b/src/lux/lexer.clj
@@ -55,12 +55,12 @@
;; [Lexers]
(def ^:private lex-white-space
(|do [[meta white-space] (&reader/read-regex #"^(\s+)")]
- (return (&/V &/$Meta (&/T meta (&/V $White_Space white-space))))))
+ (return (&/T meta (&/V $White_Space white-space)))))
(def ^:private lex-single-line-comment
(|do [_ (&reader/read-text "##")
[meta comment] (&reader/read-regex #"^(.*)$")]
- (return (&/V &/$Meta (&/T meta (&/V $Comment comment))))))
+ (return (&/T meta (&/V $Comment comment)))))
(defn ^:private lex-multi-line-comment [_]
(|do [_ (&reader/read-text "#(")
@@ -79,7 +79,7 @@
(return (&/T meta (str pre "#(" inner ")#" post))))))
;; :let [_ (prn 'lex-multi-line-comment (str comment ")#"))]
_ (&reader/read-text ")#")]
- (return (&/V &/$Meta (&/T meta (&/V $Comment comment))))))
+ (return (&/T meta (&/V $Comment comment)))))
(def ^:private lex-comment
(&/try-all% (&/|list lex-single-line-comment
@@ -88,7 +88,7 @@
(do-template [<name> <tag> <regex>]
(def <name>
(|do [[meta token] (&reader/read-regex <regex>)]
- (return (&/V &/$Meta (&/T meta (&/V <tag> token))))))
+ (return (&/T meta (&/V <tag> token)))))
^:private lex-bool $Bool #"^(true|false)"
^:private lex-int $Int #"^(-?0|-?[1-9][0-9]*)"
@@ -102,13 +102,13 @@
(|do [[_ char] (&reader/read-regex #"^(.)")]
(return char))))
_ (&reader/read-text "\"")]
- (return (&/V &/$Meta (&/T meta (&/V $Char token))))))
+ (return (&/T meta (&/V $Char token)))))
(def ^:private lex-text
(|do [[meta _] (&reader/read-text "\"")
token (lex-text-body nil)
_ (&reader/read-text "\"")]
- (return (&/V &/$Meta (&/T meta (&/V $Text token))))))
+ (return (&/T meta (&/V $Text token)))))
(def ^:private lex-ident
(&/try-all% (&/|list (|do [[meta token] (&reader/read-regex +ident-re+)]
@@ -134,17 +134,17 @@
(def ^:private lex-symbol
(|do [[meta ident] lex-ident]
- (return (&/V &/$Meta (&/T meta (&/V $Symbol ident))))))
+ (return (&/T meta (&/V $Symbol ident)))))
(def ^:private lex-tag
(|do [[meta _] (&reader/read-text "#")
[_ ident] lex-ident]
- (return (&/V &/$Meta (&/T meta (&/V $Tag ident))))))
+ (return (&/T meta (&/V $Tag ident)))))
(do-template [<name> <text> <tag>]
(def <name>
(|do [[meta _] (&reader/read-text <text>)]
- (return (&/V &/$Meta (&/T meta (&/V <tag> nil))))))
+ (return (&/T meta (&/V <tag> nil)))))
^:private lex-open-paren "(" $Open_Paren
^:private lex-close-paren ")" $Close_Paren
diff --git a/src/lux/parser.clj b/src/lux/parser.clj
index 9436eebc3..2609bf9a5 100644
--- a/src/lux/parser.clj
+++ b/src/lux/parser.clj
@@ -35,7 +35,7 @@
(|do [elems (&/repeat% parse)
token &lexer/lex]
(|case token
- (&/$Meta meta [<close-token> _])
+ [meta [<close-token> _]]
(return (&/V <tag> (&/fold &/|++ (&/|list) elems)))
_
@@ -50,7 +50,7 @@
token &lexer/lex
:let [elems (&/fold &/|++ (&/|list) elems*)]]
(|case token
- (&/$Meta meta ($Close_Brace _))
+ [meta ($Close_Brace _)]
(if (even? (&/|length elems))
(return (&/V &/$RecordS (&/|as-pairs elems)))
(fail (str "[Parser Error] Records must have an even number of elements.")))
@@ -61,7 +61,7 @@
;; [Interface]
(def parse
(|do [token &lexer/lex
- :let [(&/$Meta meta token*) token]]
+ :let [[meta token*] token]]
(|case token*
($White_Space _)
(return (&/|list))
@@ -70,37 +70,37 @@
(return (&/|list))
($Bool ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$BoolS (Boolean/parseBoolean ?value))))))
+ (return (&/|list (&/T meta (&/V &/$BoolS (Boolean/parseBoolean ?value)))))
($Int ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$IntS (Long/parseLong ?value))))))
+ (return (&/|list (&/T meta (&/V &/$IntS (Long/parseLong ?value)))))
($Real ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$RealS (Double/parseDouble ?value))))))
+ (return (&/|list (&/T meta (&/V &/$RealS (Double/parseDouble ?value)))))
($Char ^String ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$CharS (.charAt ?value 0))))))
+ (return (&/|list (&/T meta (&/V &/$CharS (.charAt ?value 0)))))
($Text ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$TextS ?value)))))
+ (return (&/|list (&/T meta (&/V &/$TextS ?value))))
($Symbol ?ident)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$SymbolS ?ident)))))
+ (return (&/|list (&/T meta (&/V &/$SymbolS ?ident))))
($Tag ?ident)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$TagS ?ident)))))
+ (return (&/|list (&/T meta (&/V &/$TagS ?ident))))
($Open_Paren _)
(|do [syntax (parse-form parse)]
- (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
+ (return (&/|list (&/T meta syntax))))
($Open_Bracket _)
(|do [syntax (parse-tuple parse)]
- (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
+ (return (&/|list (&/T meta syntax))))
($Open_Brace _)
(|do [syntax (parse-record parse)]
- (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
+ (return (&/|list (&/T meta syntax))))
_
(fail "[Parser Error] Unknown lexer token.")
diff --git a/src/lux/type.clj b/src/lux/type.clj
index 2b06553c3..36590ddd2 100644
--- a/src/lux/type.clj
+++ b/src/lux/type.clj
@@ -150,10 +150,8 @@
(Named$ (&/T "lux" "Meta")
(Univ$ empty-env
(Univ$ empty-env
- (Variant$ (&/|list
- ;; &/$Meta
- (Tuple$ (&/|list (Bound$ 3)
- (Bound$ 1)))))))))
+ (Tuple$ (&/|list (Bound$ 3)
+ (Bound$ 1)))))))
(def AST*
(Named$ (&/T "lux" "AST'")
@@ -520,6 +518,10 @@
(defn type= [x y]
(or (clojure.lang.Util/identical x y)
(let [output (|case [x y]
+ [(&/$NamedT [?xmodule ?xname] ?xtype) (&/$NamedT [?ymodule ?yname] ?ytype)]
+ (and (= ?xmodule ?ymodule)
+ (= ?xname ?yname))
+
[(&/$DataT xname) (&/$DataT yname)]
(.equals ^Object xname yname)