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
Andrew Miller
1b4aca9685
Turn off debug code that printed all constraints during unify.
...
This debug code is very noisy and makes it hard to test the dev
branch because you can't see warnings buried in all the debug
output.
2013-07-01 08:43:00 +12:00
Evan Czaplicki
9d68c10683
Add support for triple-quoted multi-line strings
2013-06-27 18:55:01 +02:00
Evan Czaplicki
da9c49338a
Fix pattern matching aliases so that it works in all cases. Previously it was totally broken.
2013-06-23 04:18:27 -07:00
Evan Czaplicki
cee9f6a9d9
Add two dummy files to make it possible to build the compiler from
...
within emacs. This makes it faster to type-check things and start
testing functions.
2013-06-23 02:43:58 -07:00
Evan Czaplicki
e80ea9e430
Add support for pattern matching on literals.
2013-06-23 01:36:23 -07:00
Evan Czaplicki
c158155bdf
Switch to using (Map String String) instead of (String -> String) as the environment.
2013-06-23 01:35:04 -07:00
Evan Czaplicki
98eceb5496
Clean up Transform/Replace.hs. Switch the environment from a (String -> String) to a (Map String String).
2013-06-23 01:33:33 -07:00
Evan Czaplicki
cd83c4c8ed
Allow full expressions as the last member of binary expressions (t + t + e)
2013-06-23 01:31:34 -07:00
evancz
9a40249e05
Fix the confusion with "Cons" and "Nil" in issue #176 .
...
Also add the ExplicitList expression.
2013-06-20 21:25:10 -07:00
evancz
4a6032f239
Add file
2013-06-18 16:00:51 -07:00
evancz
afacd1b858
Add hoverable
and hoverables
2013-06-15 00:49:22 -07:00
evancz
316cd1d0ee
Add an experimental API for dev tools.
2013-06-14 21:06:54 -07:00
evancz
a9de2342dc
Solve a "non-exhaustive pattern match"
2013-06-14 19:38:03 -07:00
evancz
35981eb42f
Finish parameterizing the AST and properly check errors in let expressions.
2013-06-14 19:23:58 -07:00
evancz
d7dcf5a9e8
Get the whole compiler building again.
2013-06-13 22:59:14 -07:00
evancz
721ce4f192
Continue reorganizing the code-base.
...
Remove uses of uniplate, introduces a regression in testing the ordering of Defs in let-expressions.
2013-06-13 22:45:08 -07:00
evancz
272ecc67fd
Rename Model/ to Metadata/ because it now only holds info about the types of library functions.
2013-06-13 20:45:12 -07:00
evancz
c7dce08193
Parameterized the AST for type annotations and variable types. Also rename Guid.hs to Unique.hs which reads a lot nicer.
2013-06-13 20:25:00 -07:00
evancz
459cf8ec73
Switch parsers over to new AST
2013-06-13 19:15:40 -07:00
evancz
339ad77c46
Begin getting the parser to match the new SourceSyntax modules.
2013-06-13 18:35:37 -07:00
evancz
bbb2b2a14f
Begin migrating the AST to its own branch for the source syntax of the language.
2013-06-13 18:00:24 -07:00
evancz
73317ed123
Switch to using MultiIf for all if expressions. Simplifies AST.
2013-06-13 16:01:35 -07:00
evancz
6fc30322ce
Print out a bunch of extra information about type checking.
2013-06-09 11:15:03 -07:00
evancz
0d96f82208
Add type constructor for extensible records.
2013-06-07 10:16:38 -07:00
evancz
6e56df59a5
Switch to only generating elmo files. Turn off the CPP flags in .cabal and remove all generated JS files on each build for now.
2013-06-07 09:38:29 -07:00
evancz
28db384691
Fix parsing bug in as
patterns that would fully commit if any spaces were seen.
...
Also add `as` variables to reported variables in patterns.
2013-06-06 23:16:46 -07:00
evancz
989d878ac5
Merge branch 'master' into dev
...
Conflicts:
compiler/Model/Ast.hs
compiler/Types/Constrain.hs
2013-06-06 22:36:14 -07:00
evancz
ba5cd880d4
Merge branch 'master' of https://github.com/evancz/Elm
2013-06-06 22:30:07 -07:00
evancz
951df07b79
Only produce elmo files. The aim is to use a layout for object files similar to Go, which has thought very hard about how to make compilation really fast.
2013-06-06 22:28:24 -07:00
evancz
ad0f1f1fed
Switch from sets of constraints to lists of constraints. This should have a positive performance impact, in that list insertion should be asymptotically faster than set insertion.
2013-06-06 21:36:18 -07:00
Andrew Miller
f8547cf4be
Update 'at patterns' to use the as notation per mailing list discussion
2013-06-07 12:53:50 +12:00