ref: db87ea9bdce9470b546bb3098f5d79a9b1023af1 Carth/src d---------
Fix subst not applied to accesses of varbindings of DLeaf
Fix not checking in dec tree Access if type vars bound
Remove remnants of AnnotAst.Fun
Allow patterns in parameter of fun

Refutable patterns will raise an error in the type checker.

Added bonus is that `fun` is now equivalent to a sugared, special case
of `fun-match`, and is desugared as such in Infer.
unsugar -> desugar
Allow Box in pattern to dereference
Fix some minor warnings
Fix some trivial warnings
Handle unit and other zero-sized types in alignmentof & sizeof
Delay StartNotDefined error until after typechecking
Make Pair a builtin datatype
Fix fun-match globals not allowed to be recursive

;; This was and should be allowed
(define (foo x) (foo x))

;; This was and should be disallowed
(define foo foo)

;; This was disallowed, but should be allowed
(define foo
    ((case x
           (foo (deref x))))))
Disallow []. Add "case" keywords to match-expression to read better
Add basic import system. Basically C-style include
Refactor Codegen. Separate module for ABI-related stuff

Also had to separate a module for the Gen-monad, as Haskell can't have
cyclical imports.
Allow integer and boolean literals in patterns

Could exploit the existing Match.PCon constructor to represent not
just datatypes, but these other enumerables as well. Didn't have to
make many additions/modifications at all -- quite nice!
Verify LLVM module before compiling to catch errors

Of course, these are internal compiler errors, but they're better to
catch in `verify` for debugging purposes. Previously, LLVM would just
segfault when processing a malformed module.
Fix incorrect from-label used in phi-node of decision switch
Fix bools not truncated from i8 to i1 for condbr
Improve gen of str lits

Instead of just defining a global var for the raw byte array and
create a Str struct at every "call"site, define 2 global vars -- one
for the raw bytes, and one for the Str structs defined in terms of it.