Commit graph

64 commits

Author SHA1 Message Date
Evan Czaplicki
ec8687610f Move type annotations out of Environment and into the Basics library 2013-07-26 00:06:52 +02:00
Evan Czaplicki
0db809ff4c Switch formatting for language pragmas 2013-07-25 20:34:04 +02:00
Evan Czaplicki
9fe6c9a564 Change functions for creating type variables, distinguish names of different constraint type variables 2013-07-25 18:07:04 +02:00
Evan Czaplicki
642b1f7fcc Properly handle constrained variables when converting from Src.Type to Type.Type 2013-07-25 17:36:52 +02:00
Evan Czaplicki
609cc3df96 Unify any constrained variables with the same super-type 2013-07-25 17:10:01 +02:00
Evan Czaplicki
a05c82f58b Mess with whitespace 2013-07-25 17:09:23 +02:00
Evan Czaplicki
d059c362d9 Fix the type of String literals 2013-07-25 16:02:49 +02:00
Evan Czaplicki
b6144aeb07 Properly unify constrained variables, serious changes here!!!
I also rewrote merge1 and merge2 which are dangerous functions to touch.
2013-07-25 15:48:58 +02:00
Evan Czaplicki
856360bd94 Get rid of unused part of the type error message 2013-07-25 15:46:48 +02:00
Evan Czaplicki
4e7ef5f177 Add definitions for functions that act on numbers and comparables
This will get moved into Elm code eventually
2013-07-25 14:54:21 +02:00
Evan Czaplicki
d456cec5c8 Overload literal numbers without a decimal point to be either Ints or Floats 2013-07-25 01:25:17 +02:00
Evan Czaplicki
82ca695dca Add support for "number" type which can be either an Int or Float 2013-07-25 01:24:16 +02:00
Evan Czaplicki
666d9f8ca3 Assume all variables with the "Native." prefix exist and have type "a" 2013-07-25 01:23:30 +02:00
Evan Czaplicki
8ffcf9e80e Prettier printing for infix operator definitions 2013-07-23 15:43:21 +02:00
Evan Czaplicki
802be96e57 Fix issue in which patterns could become too general 2013-07-23 15:32:08 +02:00
Evan Czaplicki
175798f6d2 Fix type constraints for case-expressions 2013-07-23 14:59:53 +02:00
Evan Czaplicki
f37e05af5e Fix type constraints for PData
Was generating functions based on free type variables, not on the kind
of the constructor.
2013-07-23 14:59:34 +02:00
Evan Czaplicki
d15d84deba Get patterns to type-check with the value in the case expression 2013-07-22 15:10:48 +02:00
Evan Czaplicki
138e99cc81 Begin to canonicalize imported values and types 2013-07-22 14:42:45 +02:00
Evan Czaplicki
d9471f6c62 Add flexible variables for type annotated values
Without this, things are not generalized properly.
2013-07-22 14:41:12 +02:00
Evan Czaplicki
81522b306a Make cross-module types aware of user-specified aliases 2013-07-22 00:23:26 +02:00
Evan Czaplicki
c140d690fc First draft of cross-module type checking
Currently, all top-level types are imported. No alias resolution
happens so you need to use "import open M" atm.
2013-07-21 22:50:48 +02:00
Evan Czaplicki
22f7f8a43a Create a serializable interface for a module's type information
Also add a flag to print out top-level types
2013-07-21 06:08:08 +02:00
Evan Czaplicki
23758290d9 Improve pretty printing for types 2013-07-19 19:17:51 +02:00
Evan Czaplicki
ca4502b70a Save the current environment on CSaveEnv 2013-07-19 18:03:28 +02:00
Evan Czaplicki
b0f96a2eab Switch from [Def t v] to (LExpr t v) for program representation 2013-07-19 18:02:24 +02:00
Evan Czaplicki
4dc68acd60 Stop creating types for ADT's, use Constant and Flexible in the right place 2013-07-19 18:01:26 +02:00
Evan Czaplicki
4c0f716aef Change the representation of SolverState to have a "saved environment", recognize the "Save the Environment" variable 2013-07-19 17:50:16 +02:00
Evan Czaplicki
807076ad57 Add CSaveEnv, optimize CAnd, make it prettier
CSaveEnv is a special constraint that indicates that the current
environment should be saved for later use.

(/\) now optimizes away arguments that are already CTrue.
2013-07-19 17:48:41 +02:00
Evan Czaplicki
648cbd49dd Use letters for arguments in adt constructors 2013-07-19 17:46:03 +02:00
Evan Czaplicki
45b43e8757 When creating a named var, allow it to be flexible. 2013-07-19 13:25:51 +02:00
Evan Czaplicki
26738907c6 Make error message in solver slightly more specific 2013-07-19 12:41:37 +02:00
Evan Czaplicki
b540fb43b0 Fix bug in generating Def for ADT constructors
Accidentally used the type name instead of the constructor name.
2013-07-19 12:39:38 +02:00
Evan Czaplicki
b87e45a27d Change module prefixes for some values 2013-07-19 11:19:51 +02:00
Evan Czaplicki
c881bd8ef2 Fix bug in type application when converting SourceSyntax.Type to Type.Type
Also get rid of some print statements.
2013-07-18 18:16:54 +02:00
Evan Czaplicki
901179c10f Marginally better errors when a variable is undefined. 2013-07-17 19:30:40 +02:00
Evan Czaplicki
a3a7b3ef62 Refactor type environment
Migrate some functions to Environment.hs, add built-in types like _List
and _Tuple2.
2013-07-17 19:29:27 +02:00
Evan Czaplicki
90c5c7d21c Add terse way to do type application 2013-07-17 19:26:42 +02:00
Evan Czaplicki
334d39c644 Manual dead code elimination ;) 2013-07-17 19:25:17 +02:00
Evan Czaplicki
fceb46dd4e Try to support polymorphic pattern matching
Expands each pattern into basic PVars to attempt to recover polymorphis
through the same mechanism. Need to test further.
2013-07-16 21:46:06 +02:00
Evan Czaplicki
3bb618bcde Provide the type *and definition* for data constructurs during type checking 2013-07-16 21:44:41 +02:00
Evan Czaplicki
8145e600fc Create MetadataModule for more refined information about modules
Used in most places to break a module into more orthogonal components.
Some of this data needs to be serialized into the interface files.
2013-07-16 21:42:37 +02:00
Evan Czaplicki
ce357b3d0d Switch to reporting errors with [Doc] for prettier layout. 2013-07-16 14:52:50 +02:00
Evan Czaplicki
67ef1ec77b Create the Type.Inference module which handles type inference from
start to finish. Give it a Module and it returns a dictionary mapping
top-level values to types.
2013-07-16 00:38:31 +02:00
Evan Czaplicki
0070a844d0 Switch the internal data constructor name for tuples. Before tuple
constructors could be shadowed by user defined ADT's such as "Tuple0",
"Tuple2", etc. Now it uses "_Tuple0" to make it impossible to overlap
with user defined ASTs.
2013-07-14 19:52:50 +02:00
Evan Czaplicki
2b9853ce9b Get variable reordering working for Declarations. 2013-07-13 13:44:40 +02:00
Evan Czaplicki
7f433922ed Create module to sort let-blocks into "strongly connected components".
This does two things:

  * makes it possible to automatically generalize functions without
    bothering the programmer about managing dependencies.

  * sorts values such that they'll be defined in the appropriate order
    when they are mapped down to JavaScript.
2013-07-12 22:24:12 +02:00
Evan Czaplicki
4d7562f317 Begin generating constraints for whole programs. Need to perform
dependency sort within let-expressions for things to work properly though.
2013-07-12 16:21:07 +02:00
Evan Czaplicki
4208b5c9de Remove some debugging stuff and generally clean up the code.
There was one potential error in which a debug needed to be a liftIO,
the computation it performed was not optional.
2013-07-12 11:05:03 +02:00
Evan Czaplicki
b0387821b4 Fix error in generalization in which some variables would escape their
rank. Problem was that young variables were not all being marked as
young.

This resolved a soundness issue described in the post on
"How OCaml type checker works".
2013-07-12 11:00:35 +02:00