aboutsummaryrefslogtreecommitdiff
path: root/source/lux.lux
diff options
context:
space:
mode:
authorEduardo Julian2015-04-16 15:37:27 -0400
committerEduardo Julian2015-04-16 15:37:27 -0400
commit12aed842461ecc596c07227dcefce36d440e2c85 (patch)
treeee4275cf2ffd89192f91414134cd38982003fb4a /source/lux.lux
parentf6dc520d04b517cd8e907d4738aae60b279c3877 (diff)
- Type-vars can now be deleted and be scoped (through with-var).
- Fixed a few bugs with types and pattern-matching. - Fixed a bug wherein primitive-analysis did now unify the primitive type with the exotype. - Modified lambda-analysis so functions subject to universal quantification can manage better the universally-quantified variables.
Diffstat (limited to '')
-rw-r--r--source/lux.lux323
1 files changed, 160 insertions, 163 deletions
diff --git a/source/lux.lux b/source/lux.lux
index 357366d58..ca6a1925c 100644
--- a/source/lux.lux
+++ b/source/lux.lux
@@ -74,173 +74,170 @@
#Nil])])])])])])])])])])]))])
#NothingT]))))
-## ## (deftype (Maybe a)
-## ## (| #None
-## ## (#Some a)))
-## (def' Maybe
-## (#AllT [#Nil "Maybe" "a"
-## (#VariantT (#Cons [["lux;None" (#TupleT #Nil)]
-## (#Cons [["lux;Some" (#BoundT "a")]
-## #Nil])]))]))
-
-## ## (deftype (Bindings k v)
-## ## (& #counter Int
-## ## #mappings (List (, k v))))
-## (def' Bindings
-## (#AllT [#Nil "Bindings" "k"
-## (#AllT [#Nil "" "v"
-## (#RecordT (#Cons [["lux;counter" Int]
-## (#Cons [["lux;mappings" (#AppT [List
-## (#TupleT (#Cons [(#BoundT "k")
-## (#Cons [(#BoundT "v")
-## #Nil])]))])]
-## #Nil])]))])]))
-
-## ## (deftype (Env k v)
-## ## (& #name Text
-## ## #inner-closures Int
-## ## #locals (Bindings k v)
-## ## #closure (Bindings k v)))
-## (def' Env
-## (#AllT [#Nil "Env" "k"
-## (#AllT [#Nil "" "v"
-## (#RecordT (#Cons [["lux;name" Text]
-## (#Cons [["lux;inner-closures" Int]
-## (#Cons [["lux;locals" (#AppT [(#AppT [Bindings (#BoundT "k")])
-## (#BoundT "v")])]
-## (#Cons [["lux;closure" (#AppT [(#AppT [Bindings (#BoundT "k")])
-## (#BoundT "v")])]
-## #Nil])])])]))])]))
-
-## ## (deftype Cursor
-## ## (, Text Int Int))
-## (def' Cursor
-## (#TupleT (#Cons [Text (#Cons [Int (#Cons [Int #Nil])])])))
-
-## ## (deftype (Meta m v)
-## ## (| (#Meta (, m v))))
-## (def' Meta
-## (#AllT [#Nil "Meta" "m"
-## (#AllT [#Nil "" "v"
-## (#VariantT (#Cons [["lux;Meta" (#TupleT (#Cons [(#BoundT "m")
-## (#Cons [(#BoundT "v")
-## #Nil])]))]
-## #Nil]))])]))
-
-## ## (def' Reader
-## ## (List (Meta Cursor Text)))
-## (def' Reader
-## (#AppT [List
-## (#AppT [(#AppT [Meta Cursor])
-## Text])]))
-
-## ## (deftype Compiler_State
-## ## (& #source (Maybe Reader)
-## ## #modules (List Any)
-## ## #module-aliases (List Any)
-## ## #global-env (Maybe (Env Text Any))
-## ## #local-envs (List (Env Text Any))
-## ## #types (Bindings Int Type)
-## ## #writer (^ org.objectweb.asm.ClassWriter)
-## ## #loader (^ java.net.URLClassLoader)
-## ## #eval-ctor Int))
-## (def' Compiler_State
-## (#RecordT (#Cons [["lux;source" (#AppT [Maybe Reader])]
-## (#Cons [["lux;modules" (#AppT [List Any])]
-## (#Cons [["lux;module-aliases" (#AppT [List Any])]
-## (#Cons [["lux;global-env" (#AppT [Maybe (#AppT [(#AppT [Env Text]) Any])])]
-## (#Cons [["lux;local-envs" (#AppT [List (#AppT [(#AppT [Env Text]) Any])])]
-## (#Cons [["lux;types" (#AppT [(#AppT [Bindings Int]) Type])]
-## (#Cons [["lux;writer" (#DataT "org.objectweb.asm.ClassWriter")]
-## (#Cons [["lux;loader" (#DataT "java.lang.ClassLoader")]
-## (#Cons [["lux;eval-ctor" Int]
-## #Nil])])])])])])])])])))
+## (deftype (Maybe a)
+## (| #None
+## (#Some a)))
+(def' Maybe
+ (#AllT [#Nil "Maybe" "a"
+ (#VariantT (#Cons [["lux;None" (#TupleT #Nil)]
+ (#Cons [["lux;Some" (#BoundT "a")]
+ #Nil])]))]))
-## ## (deftype #rec Syntax
-## ## (Meta Cursor (| (#Bool Bool)
-## ## (#Int Int)
-## ## (#Real Real)
-## ## (#Char Char)
-## ## (#Text Text)
-## ## (#Form (List Syntax))
-## ## (#Tuple (List Syntax))
-## ## (#Record (List (, Text Syntax))))))
-## (def' Syntax
-## (case' (#AppT [(#BoundT "Syntax") (#BoundT "")])
-## Syntax
-## (case' (#AppT [List Syntax])
-## SyntaxList
-## (#AppT [(#AllT [#Nil "Syntax" ""
-## (#VariantT (#Cons [["lux;Bool" Bool]
-## (#Cons [["lux;Int" Int]
-## (#Cons [["lux;Real" Real]
-## (#Cons [["lux;Char" Char]
-## (#Cons [["lux;Text" Text]
-## (#Cons [["lux;Form" SyntaxList]
-## (#Cons [["lux;Tuple" SyntaxList]
-## (#Cons [["lux;Record" (#AppT [List (#TupleT (#Cons [Text (#Cons [Syntax #Nil])]))])]
-## #Nil])])])])])])])]))])
-## #NothingT]))))
+## (deftype (Bindings k v)
+## (& #counter Int
+## #mappings (List (, k v))))
+(def' Bindings
+ (#AllT [#Nil "Bindings" "k"
+ (#AllT [#Nil "" "v"
+ (#RecordT (#Cons [["lux;counter" Int]
+ (#Cons [["lux;mappings" (#AppT [List
+ (#TupleT (#Cons [(#BoundT "k")
+ (#Cons [(#BoundT "v")
+ #Nil])]))])]
+ #Nil])]))])]))
+
+## (deftype (Env k v)
+## (& #name Text
+## #inner-closures Int
+## #locals (Bindings k v)
+## #closure (Bindings k v)))
+(def' Env
+ (#AllT [#Nil "Env" "k"
+ (#AllT [#Nil "" "v"
+ (#RecordT (#Cons [["lux;name" Text]
+ (#Cons [["lux;inner-closures" Int]
+ (#Cons [["lux;locals" (#AppT [(#AppT [Bindings (#BoundT "k")])
+ (#BoundT "v")])]
+ (#Cons [["lux;closure" (#AppT [(#AppT [Bindings (#BoundT "k")])
+ (#BoundT "v")])]
+ #Nil])])])]))])]))
+
+## (deftype Cursor
+## (, Text Int Int))
+(def' Cursor
+ (#TupleT (#Cons [Text (#Cons [Int (#Cons [Int #Nil])])])))
+
+## (deftype (Meta m v)
+## (| (#Meta (, m v))))
+(def' Meta
+ (#AllT [#Nil "Meta" "m"
+ (#AllT [#Nil "" "v"
+ (#VariantT (#Cons [["lux;Meta" (#TupleT (#Cons [(#BoundT "m")
+ (#Cons [(#BoundT "v")
+ #Nil])]))]
+ #Nil]))])]))
-## ## (deftype (Either l r)
-## ## (| (#Left l)
-## ## (#Right r)))
-## (def' Either
-## (#AllT [#Nil "_" "l"
-## (#AllT [#Nil "" "r"
-## (#VariantT (#Cons [["lux;Left" (#BoundT "l")]
-## (#Cons [["lux;Right" (#BoundT "r")]
-## #Nil])]))])]))
+## (def' Reader
+## (List (Meta Cursor Text)))
+(def' Reader
+ (#AppT [List
+ (#AppT [(#AppT [Meta Cursor])
+ Text])]))
+
+## (deftype Compiler_State
+## (& #source (Maybe Reader)
+## #modules (List Any)
+## #module-aliases (List Any)
+## #global-env (Maybe (Env Text Any))
+## #local-envs (List (Env Text Any))
+## #types (Bindings Int Type)
+## #writer (^ org.objectweb.asm.ClassWriter)
+## #loader (^ java.net.URLClassLoader)
+## #eval-ctor Int))
+(def' Compiler_State
+ (#RecordT (#Cons [["lux;source" (#AppT [Maybe Reader])]
+ (#Cons [["lux;modules" (#AppT [List Any])]
+ (#Cons [["lux;module-aliases" (#AppT [List Any])]
+ (#Cons [["lux;global-env" (#AppT [Maybe (#AppT [(#AppT [Env Text]) Any])])]
+ (#Cons [["lux;local-envs" (#AppT [List (#AppT [(#AppT [Env Text]) Any])])]
+ (#Cons [["lux;types" (#AppT [(#AppT [Bindings Int]) Type])]
+ (#Cons [["lux;writer" (#DataT "org.objectweb.asm.ClassWriter")]
+ (#Cons [["lux;loader" (#DataT "java.lang.ClassLoader")]
+ (#Cons [["lux;eval-ctor" Int]
+ #Nil])])])])])])])])])))
+
+## (deftype #rec Syntax
+## (Meta Cursor (| (#Bool Bool)
+## (#Int Int)
+## (#Real Real)
+## (#Char Char)
+## (#Text Text)
+## (#Form (List Syntax))
+## (#Tuple (List Syntax))
+## (#Record (List (, Text Syntax))))))
+(def' Syntax
+ (case' (#AppT [(#BoundT "Syntax") (#BoundT "")])
+ Syntax
+ (case' (#AppT [List Syntax])
+ SyntaxList
+ (#AppT [(#AllT [#Nil "Syntax" ""
+ (#AppT [(#AppT [Meta Cursor])
+ (#VariantT (#Cons [["lux;Bool" Bool]
+ (#Cons [["lux;Int" Int]
+ (#Cons [["lux;Real" Real]
+ (#Cons [["lux;Char" Char]
+ (#Cons [["lux;Text" Text]
+ (#Cons [["lux;Form" SyntaxList]
+ (#Cons [["lux;Tuple" SyntaxList]
+ (#Cons [["lux;Record" (#AppT [List (#TupleT (#Cons [Text (#Cons [Syntax #Nil])]))])]
+ #Nil])])])])])])])]))])])
+ #NothingT]))))
+
+## (deftype (Either l r)
+## (| (#Left l)
+## (#Right r)))
+(def' Either
+ (#AllT [#Nil "_" "l"
+ (#AllT [#Nil "" "r"
+ (#VariantT (#Cons [["lux;Left" (#BoundT "l")]
+ (#Cons [["lux;Right" (#BoundT "r")]
+ #Nil])]))])]))
+
+## (deftype Macro
+## (-> (List Syntax) Compiler_State
+## (Either Text [Compiler_State (List Syntax)])))
+(def' Macro
+ (case' (#AppT [List Syntax])
+ SyntaxList
+ (#LambdaT [SyntaxList
+ (#LambdaT [Compiler_State
+ (#AppT [(#AppT [Either Text])
+ (#TupleT (#Cons [Compiler_State
+ (#Cons [SyntaxList #Nil])]))])])])))
+
+## Base functions & macros
+## (def (_meta data)
+## (All [a] (-> a (Meta Cursor a)))
+## (#Meta [["" -1 -1] data]))
+(def' _meta
+ (check' (#AllT [#Nil "_" "a"
+ (#LambdaT [(#BoundT "a")
+ (#AppT [(#AppT [Meta Cursor])
+ (#BoundT "a")])])])
+ (lambda' _ data
+ (#Meta [["" -1 -1] data]))))
+
+(def' let'
+ (check' Macro
+ (lambda' _ tokens
+ (lambda' _ state
+ (case' tokens
+ (#Cons [lhs (#Cons [rhs (#Cons [body #Nil])])])
+ (#Right [state
+ (#Cons [(_meta (#Form (#Cons [(_meta (#Symbol ["" "case'"]))
+ (#Cons [rhs (#Cons [lhs (#Cons [body #Nil])])])])))
+ #Nil])])
+
+ _
+ (#Left "Wrong syntax for let'"))
+ ))))
-## ## (deftype Macro
-## ## (-> (List Syntax) Compiler_State
-## ## (Either Text [Compiler_State (List Syntax)])))
-## (def' Macro
-## (case' (#AppT [List Syntax])
-## SyntaxList
-## (#LambdaT [SyntaxList
-## (#LambdaT [CompilerState
-## (#AppT [(#AppT [Either Text])
-## (#TupleT (#Cons [CompilerState
-## (#Cons [SyntaxList #Nil])]))])])])))
-
-## ## Base functions & macros
-## ## (def (_meta data)
-## ## (All [a] (-> a (Meta Cursor a)))
-## ## (#Meta [["" -1 -1] data]))
-## (def' _meta
-## (check' (#AllT [#Nil "_" "a"
-## (#LambdaT [(#BoundT "a")
-## (#AppT [(#AppT [Meta Cursor])
-## (#BoundT "a")])])])
-## (lambda' _ data
-## (#Meta [["" -1 -1] data]))))
-
-## ## (def' let'
-## ## (check' Macro
-## ## (lambda' _ tokens
-## ## (lambda' _ state
-## ## (case' tokens
-## ## (#Cons [lhs (#Cons [rhs (#Cons [body #Nil])])])
-## ## (#Right [state
-## ## (#Cons [(_meta (#Form (#Cons [(_meta (#Symbol ["" "case'"]))
-## ## (#Cons [rhs (#Cons [lhs (#Cons [body #Nil])])])])))
-## ## #Nil])])
-
-## ## _
-## ## (#Left "Wrong syntax for let'"))
-## ## ))))
-## ## (def' let'
-## ## (check' Macro
-## ## (lambda' _ tokens
-## ## (lambda' _ state
-## ## (#Left "Wrong syntax for let'")
-## ## ))))
## (def' let'
-## (check' (#AppT [(#AppT [Either Text])
-## (#TupleT (#Cons [CompilerState
-## (#Cons [(#AppT [List Syntax]) #Nil])]))])
-## (#Left "Wrong syntax for let'")))
+## (check' Macro
+## (lambda' _ tokens
+## (lambda' _ state
+## (#Left "Wrong syntax for let'")
+## ))))
## (def' let'
## (lambda' _ tokens