Commit graph

366 commits

Author SHA1 Message Date
Evan Czaplicki
e8ab1c28ae Remove SourceSyntax.Rename, which was unused 2013-07-29 11:52:34 +02:00
Evan Czaplicki
fa132ea6a8 Change name of Prelude to Basic, matching change in libraries/ 2013-07-28 02:35:52 +02:00
Evan Czaplicki
0a6bd8bd96 Generate and use interfaces.data so standard library types are available 2013-07-28 02:24:17 +02:00
Evan Czaplicki
da346ea6a1 Show type errors in the order they appear in the source file 2013-07-27 00:53:34 +02:00
Evan Czaplicki
272557d785 Fix for "trying to write to a file in a non-existant directory" 2013-07-27 00:39:40 +02:00
Evan Czaplicki
fd63aff70b Correct the code that unifies records 2013-07-27 00:15:26 +02:00
Evan Czaplicki
576e979483 Simplify code to generate record constraints 2013-07-27 00:14:38 +02:00
Evan Czaplicki
ab41d0c0e8 Take out types that were listed as "builtin" 2013-07-26 21:19:08 +02:00
Evan Czaplicki
c1d5f86e82 Simplify type error messages 2013-07-26 21:18:44 +02:00
Evan Czaplicki
42065eb075 Generate fewer intermediate variables during record unification 2013-07-26 19:39:42 +02:00
Evan Czaplicki
ebcaad0004 Fix possibility of calling maximum on empty lists 2013-07-26 19:39:12 +02:00
Evan Czaplicki
2a51470fc1 Implement unification for records 2013-07-26 19:04:43 +02:00
Evan Czaplicki
760ad905cf Add record constructors, begin using lists to represent fields in record types to maintain ordering from the source program 2013-07-26 18:20:57 +02:00
Evan Czaplicki
2a5bee06fc Include type aliases from dependencies 2013-07-26 17:35:48 +02:00
Evan Czaplicki
39f2a8717d Rewrite readDeps so that modules are never read more than once 2013-07-26 16:38:40 +02:00
Evan Czaplicki
0f85a2fcfa Resolve type aliases in instantiator 2013-07-26 15:08:04 +02:00
Evan Czaplicki
46631c3616 Remove dead code 2013-07-26 15:07:35 +02:00
Evan Czaplicki
637c7e0da0 Put type aliases in ModuleInterface 2013-07-26 15:06:35 +02:00
Evan Czaplicki
6948858f78 Allow multiple different imports of the same module, clean up canonicalize code 2013-07-26 12:56:36 +02:00
Evan Czaplicki
938675110d Fix parser for "import List" which before was not importing anything. 2013-07-26 12:31:49 +02:00
Evan Czaplicki
0681fbe583 Get rid of dead function and give instantiateTypeWithContext a shorter name 2013-07-26 12:22:15 +02:00
Evan Czaplicki
32a331b3b0 Load ADTs into the environment to fix constraint generation for patterns 2013-07-26 12:19:24 +02:00
Evan Czaplicki
2b2bc087e4 Minor cosmetic change 2013-07-26 11:40:44 +02:00
Evan Czaplicki
ff67c667a0 Get Matrix2D and Signal compiling 2013-07-26 00:33:59 +02:00
Evan Czaplicki
c19ccfe56a Stop importing the Native library by default 2013-07-26 00:19:43 +02:00
Evan Czaplicki
727d708289 Get libraries to compile 2013-07-26 00:19:21 +02:00
Evan Czaplicki
ec8687610f Move type annotations out of Environment and into the Basics library 2013-07-26 00:06:52 +02:00
Evan Czaplicki
eba7e6292e Trim some unused dependencies 2013-07-25 20:53:54 +02:00
Evan Czaplicki
016a199b50 Start using Metadata.Prelude 2013-07-25 20:53:22 +02:00
Evan Czaplicki
d4b23664e4 Rename Metadata.Libraries to Metadata.Prelude 2013-07-25 20:44:41 +02:00
Evan Czaplicki
a4468d2eac Combine two Metadata files into one 2013-07-25 20:39:23 +02:00
Evan Czaplicki
0db809ff4c Switch formatting for language pragmas 2013-07-25 20:34:04 +02:00
Evan Czaplicki
e702370b9e Rename a module 2013-07-25 20:21:17 +02:00
Evan Czaplicki
4c02f6ba7d Start reworking the Metadata modules 2013-07-25 20:20:33 +02:00
Evan Czaplicki
6c808aaa47 change whitespace 2013-07-25 20:19:50 +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
d9c1317a25 Add pretty printing for record types 2013-07-25 17:09:10 +02:00
Evan Czaplicki
d059c362d9 Fix the type of String literals 2013-07-25 16:02:49 +02:00
Evan Czaplicki
abb6dc19f6 Prettier printing for infix functions like div 2013-07-25 15:55:55 +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
2609f5dda7 Add support for let (==>) = Lambda in … 2013-07-23 17:00:05 +02:00
Evan Czaplicki
7b90975dad Simplify code to check for structural errors 2013-07-23 16:15:56 +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
eaa751d987 Make pretty printing for types prettier 2013-07-22 14:52:57 +02:00
Evan Czaplicki
138e99cc81 Begin to canonicalize imported values and types 2013-07-22 14:42:45 +02:00
Evan Czaplicki
eb722a20dc Make a type less general 2013-07-22 14:41:55 +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
6f94400f2d Begin parsing types and patterns such as A.B.C 2013-07-22 14:40:32 +02:00
Evan Czaplicki
97bd68a796 Make parse errors print more nicely 2013-07-22 14:40:00 +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
4bcde7e799 Add flag for printing a whole program 2013-07-21 22:49:42 +02:00
Evan Czaplicki
1f8b7bbc98 Introduce TypeLibrary alias, a minor cosmetic change 2013-07-21 09:23:01 +02:00
Evan Czaplicki
0fd1f677a5 Get things in place to pass Prelude interfaces 2013-07-21 07:17:01 +02:00
Evan Czaplicki
b1dd1574a8 Begin passing module interfaces when compiling dependencies 2013-07-21 07:14:13 +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
fa11f8e390 get rid of unused imports 2013-07-21 00:15:35 +02:00
Evan Czaplicki
5cb82c6891 Add support for "(,,) a b c" as a valid type annotation 2013-07-20 18:53:41 +02:00
Evan Czaplicki
1a4732a436 Start building a .elmi file that contains the types of all top-level functions 2013-07-20 18:53:15 +02:00
Evan Czaplicki
c9a1cc96f6 Minor reformatting and removing unused dependencies 2013-07-20 18:52:43 +02:00
Evan Czaplicki
23758290d9 Improve pretty printing for types 2013-07-19 19:17:51 +02:00
Evan Czaplicki
9592d286bb Start using Data.Graph to work out dependency problems and other minor tweaks
Print out the saved type environment, and get things working with the
program field in MetadataModule.
2013-07-19 18:05:31 +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
c942afea6a Nicer pretty printing and a special variable to "Save the Environment" 2013-07-19 17:45:16 +02:00
Evan Czaplicki
c1aef789ee Flatten lets only during JavaScript generation 2013-07-19 17:43:37 +02:00
Evan Czaplicki
ce652d9a35 Print errors more nicely 2013-07-19 15:40:37 +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
1d1083600f Fix naming bug for List type 2013-07-17 19:24:56 +02:00
Evan Czaplicki
e852ae25e3 Add field to MetadataModule for datatypes 2013-07-17 19:24:40 +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
82983a6f24 Update more modules to use the MetadataModule data structure 2013-07-16 21:43:56 +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
621a9c2d2e Add a way to flatten lets that have become nested 2013-07-16 21:40:11 +02:00
Evan Czaplicki
0cfae2e43b More specific imports 2013-07-16 21:38:43 +02:00
Evan Czaplicki
640f98e7d5 Rename functions and modules 2013-07-16 21:38:20 +02:00
Evan Czaplicki
1ffaad1f5c Create an isOp function for strings. 2013-07-16 21:37:48 +02:00
Evan Czaplicki
91be5a0c03 Rename the parser. 2013-07-16 16:02:04 +02:00
Evan Czaplicki
ce357b3d0d Switch to reporting errors with [Doc] for prettier layout. 2013-07-16 14:52:50 +02:00
Evan Czaplicki
1c9da4bf9c Force whitespace between number and operator in infix declarations. 2013-07-16 14:50:35 +02:00
Evan Czaplicki
8590c6bd18 Add parsing for infix declarations. No support for actually using this
information though.
2013-07-16 14:39:58 +02:00
Evan Czaplicki
72bd5cb8eb Clean out this file, getting rid of dead code and adding some types. 2013-07-16 14:39:26 +02:00
Evan Czaplicki
a5bc960067 Minor cosmetic changes 2013-07-16 00:40:11 +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
18adffc06d Turn unary negation back on. 2013-07-16 00:36:34 +02:00
Evan Czaplicki
90d50dbb13 Turn off unary negation parsing for now. It has weird behavior when
paired with function calls:

  (- sqrt 9)   -- parse error
  (-sqrt 9)    -- type error, cannot negate function
  -(sqrt 9)    -- this works
  - (sqrt 9)   -- parse error
  - sqrt 9     -- parse error
2013-07-15 12:22:04 +02:00
Evan Czaplicki
2b9886336f Fix parsing of unary negation when it is the first thing in parentheses. 2013-07-15 11:53:53 +02:00
Evan Czaplicki
93a948cd67 Add back in checks for duplicate and out-of-order definitions. 2013-07-15 01:06:00 +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
343dcf2250 Add support for unary negation with the '-' symbol. Makes the use of
'-' whitespace sensitive, as in the unary negation proposal in
elm-discuss.

f -1  == f (0-1)
x - 1 == (x-1)
x-1   == (x-1)
2013-07-14 17:55:38 +02:00
Evan Czaplicki
08ff939174 Be more flexible with the position of the closing bracket of a record type. 2013-07-14 14:55:29 +02:00
Evan Czaplicki
fe7357a0b5 Export boundVars function, which is currently reeded to generate JS. 2013-07-14 01:41:52 +02:00
Evan Czaplicki
87d2f8d57d Get declarations parsing properly. The definition parser needs to be
the last option.
2013-07-14 01:41:03 +02:00
Evan Czaplicki
2b9853ce9b Get variable reordering working for Declarations. 2013-07-13 13:44:40 +02:00
Evan Czaplicki
fe23c0e66d fix pretty printer for chars 2013-07-13 01:05:48 +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
Evan Czaplicki
dabada1d98 Make constraint pretty printing prettier. 2013-07-11 23:30:18 +02:00
Evan Czaplicki
cb914d91ff Get all of the Haskell files compiling with the new type checker.
Does not actually work, undefined is used in some places as a
stopgap measure.
2013-07-11 12:48:37 +02:00
Evan Czaplicki
ca77056fc9 Improve quality of error messages. 2013-07-11 00:31:56 +02:00
Evan Czaplicki
b5887f41c9 Get type inference working in the basic case. Begin working on
printing errors in a prettier way.
2013-07-10 14:31:57 +02:00
Evan Czaplicki
f87e316847 Make pretty printing properly parenthesize higher order functions.
Not the best implementation, but it is simple and works well.
2013-07-09 21:59:58 +02:00
Evan Czaplicki
497d478d26 Get the solver working on basic programs. It outputs pretty types for the
variables in the program. Need to test further and start doing some benchmarking.
2013-07-09 21:52:05 +02:00
Evan Czaplicki
ca62ee64a9 Create type pools, have an organized model of state to flow through
the State Transformer during constraint solving and variable unification.
2013-07-09 10:25:50 +02:00
Evan Czaplicki
4c51159f2a Create a Type.Pool module specifically for variable pools. Start using
a state transformer to thread the pool and errors through.
2013-07-08 20:03:08 +02:00
Evan Czaplicki
2ef18826de Start adding constraint generation for declarations. 2013-07-08 18:23:18 +02:00
Evan Czaplicki
5cc99f5542 Remove the old type-checker code. 2013-07-08 16:58:09 +02:00
Evan Czaplicki
0ed72056b6 Add pretty printing for type constraints.
Convert source-syntax types into type-checker types and print them
with pretty type variables.

Generate constraints for let-expressions using type annotations.

Build test function to turn strings into type constraints.
2013-07-08 16:47:44 +02:00
Evan Czaplicki
96fd5bfd78 Update program parser to use Parse.Declarations 2013-07-07 22:11:16 +02:00
Evan Czaplicki
d29ca3beeb Create a Parse.Declaration file for all declarations. Get rid of special
purpose Parse.Foreign library.
2013-07-07 22:06:56 +02:00
Evan Czaplicki
e4ca96731d Create a source syntax for types that will get converted into the internal type representation during type checking. 2013-07-07 18:13:40 +02:00
Evan Czaplicki
f2b3ed7027 Start using the PrettyPrint library to show expressions, literals, and patterns. 2013-07-07 12:56:34 +02:00
Evan Czaplicki
078692ad8c Get Optimize.hs updated for the newer AST. 2013-07-07 12:55:08 +02:00
Evan Czaplicki
b87b84556c Move the Environment.hs and Fragment.hs files down a directory. 2013-07-07 12:54:05 +02:00
Evan Czaplicki
ca8441ff2f Continue getting the new type-checker in order. 2013-07-07 12:52:48 +02:00
Evan Czaplicki
947b82ed09 Switch more files over to new Expressions 2013-07-04 17:31:22 +02:00
Evan Czaplicki
5c68f6bb73 Convert more files to the new Expression format that relies more on
patterns. Seems to clean things up so far.

Also, begin adding a module that resorts definitions to make sure
that each definition comes after the ones it depends on. This will
also make it possible to disallow recursive values statically.
2013-07-04 17:24:04 +02:00
Evan Czaplicki
69ed7631fe Start switching over to an AST that uses patterns in lambdas and
pulls the arguments out of Definitions (placing them in lambdas).
2013-07-04 11:36:08 +02:00
Evan Czaplicki
351c33c486 Start generating constraints for let-expressions. Account for mutual recursion,
but will throw a runtime error if a user has given type annotations.
2013-07-03 19:51:38 +02:00
Evan Czaplicki
cdb63bd8d1 Start writing a new type checker based on the ATAPL chapter on efficient type-inference. 2013-07-03 14:35:51 +02:00
Evan Czaplicki
74d3c35131 Fix optimization bug with > sign. 2013-07-02 16:58:19 +02:00
Evan Czaplicki
60de915824 Merge branch 'dev' of https://github.com/evancz/Elm into dev 2013-07-01 20:05:49 +02:00
Evan Czaplicki
d700acfeac Fix substitutions for ExplicitList. 2013-07-01 20:00:37 +02:00