[project @ 1998-12-10 08:54:18 by simonpj]
This massive commit is what Simon has been up to for a couple of weeks. 1. Scoped type variables are in 2. The typechecker works a bit differently. In partiular, the compiler no longer has TcTyVars of a different type than TyVars. All the 's' and 'flexi' type parameters have vanished from Id, TyVar, Type, etc. The typchecker monad is now in the IO world (though I didn't get around to removing the 's' parameter from the monad, but it's no longer used) Bottom line: significantly simpler, fewer gratuitous conversions from TcType <-> Type but less type security in the compiler There was a reason for doing this now; somehow the 's' stuff got in the way of kind inference for scoped type variables and I lost patience with it. 3. Haskell98-style reporting of scope errors; i.e. you only get an error if you use a variable that could mean two different things. At the same time I did a lot of tidying-up in the renamer. 4. Mostly-complete fix to the reporting of unused variables, which has never worked properly. (The 'mostly' bit is because it reports those 'system' tycons like _C as unused. I'm on the job.) 5. The parser is a bit tider than it was. A few more ugn files give a more refined C data type. I had to tackle this because of the scoped type variables. 6. Haskell98-style fixities. Fixity decls can occur wherever a type signature can 7. Some HsSyn changes that constitute minor tidy ups Put TypeDecl and ClassDecl into one type [HsDecls] Improved the HsMatch/GRHSs etc data types. 8. TcGRHSs is removed; combined into TcMatches. I DO NOT PROMISE THAT ALL OF THIS WORKS. It compiles the Prelude, but I have not tested it more than that. Stick to 4.01 if you want a compiler that's sure to work.