Commit graph

28 commits

Author SHA1 Message Date
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
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
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
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
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