summaryrefslogtreecommitdiff
path: root/ghc/compiler
Commit message (Collapse)AuthorAgeFilesLines
...
* fix for the unregisterised waySimon Marlow2006-02-091-7/+11
| | | | | | We always assign to BaseReg on return from resumeThread(), but in cases where BaseReg is not an lvalue (eg. unreg) we need to disable this assigment. See comments for more details.
* prof/smp combination probably doesn't work, disable itSimon Marlow2006-02-091-1/+0
|
* tiny panic msg fixSimon Marlow2006-02-091-1/+1
|
* Loosen the rules for instance declarations (Part 2)simonpj@microsoft.com2006-02-092-57/+54
| | | | | | Tidying up to Ross's patch, plus adding documenation for it.
* relaxed instance termination testRoss Paterson2006-02-062-22/+95
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With -fglasgow-exts but not -fallow-undecidable-instances, GHC 6.4 requires that instances be of the following form: (1) each assertion in the context must constrain distinct variables mentioned in the head, and (2) at least one argument of the head must be a non-variable type. This patch replaces these rules with the requirement that each assertion in the context satisfy (1) no variable has more occurrences in the assertion than in the head, and (2) the assertion has fewer constructors and variables (taken together and counting repetitions) than the head. This allows all instances permitted by the old rule, plus such instances as instance C a instance Show (s a) => Show (Sized s a) instance (Eq a, Show b) => C2 a b instance C2 Int a => C3 Bool [a] instance C2 Int a => C3 [a] b instance C4 a a => C4 [a] [a] but still ensures that under any substitution assertions in the context will be smaller than the head, so context reduction must terminate. This is probably the best we can do if we consider each instance in isolation.
* Fix CPP failure by adding space before hASH_TBL_SIZEsimonpj@microsoft.com2006-02-091-1/+1
|
* Do type refinement in TcIfacesimonpj@microsoft.com2006-02-086-16/+32
| | | | | | | | | | | | | | | | | | | This commit fixes a bug in 6.4.1 and the HEAD. Consider this code, recorded **in an interface file** \(x::a) -> case y of MkT -> case x of { True -> ... } (where MkT forces a=Bool) In the "case x" we need to know x's type, because we use that to find which module to look for "True" in. x's type comes from the envt, so we must refine the envt. The alternative would be to record more info with an IfaceCase, but that would change the interface file format. (This stuff will go away when we have proper coercions.)
* Add mapOccEnvsimonpj@microsoft.com2006-02-081-2/+3
|
* A little more debug printingsimonpj@microsoft.com2006-02-081-2/+1
|
* Show types of case result when debug is onsimonpj@microsoft.com2006-02-081-3/+5
|
* make the smp way RTS-only, normal libraries now work with -smpSimon Marlow2006-02-0811-64/+50
| | | | | | | | | | | | | | We had to bite the bullet here and add an extra word to every thunk, to enable running ordinary libraries on SMP. Otherwise, we would have needed to ship an extra set of libraries with GHC 6.6 in addition to the two sets we already ship (normal + profiled), and all Cabal packages would have to be compiled for SMP too. We decided it best just to take the hit now, making SMP easily accessible to everyone in GHC 6.6. Incedentally, although this increases allocation by around 12% on average, the performance hit is around 5%, and much less if your inner loop doesn't use any laziness.
* add -dfaststring-stats to dump some stats about the FastString hash tableSimon Marlow2006-02-083-1/+67
|
* Wibble to type signaturesimonpj@microsoft.com2006-02-071-1/+1
|
* Empty forall should disable implicit quantificationsimonpj@microsoft.com2006-02-071-3/+7
|
* Remove unused constructor in SourceTypeCtxtsimonpj@microsoft.com2006-02-061-6/+0
|
* Basic completion in GHCiSimon Marlow2006-02-062-45/+180
| | | | | | | | This patch adds completion support to GHCi when readline is being used. Completion of identifiers (in scope only, but including qualified identifiers) in expressions is provided. Also, completion of commands (:cmd), and special completion for certain commands (eg. module names for the :module command) are also provided.
* Improve error report for pattern guardssimonpj@microsoft.com2006-02-061-7/+7
|
* Add bang patternssimonpj@microsoft.com2006-02-0317-148/+236
| | | | | | | | | | This commit adds bang-patterns, enabled by -fglasgow-exts or -fbang-patterns diabled by -fno-bang-patterns The idea is described here http://haskell.galois.com/cgi-bin/haskell-prime/trac.cgi/wiki/BangPatterns
* Add Bag.anyBag (analogous to List.any)simonpj@microsoft.com2006-02-031-1/+7
|
* Deal correctly with lazy patterns and GADTssimonpj@microsoft.com2006-02-021-5/+6
|
* Record the type in TuplePat (necessary for GADTs)simonpj@microsoft.com2006-02-0216-84/+101
| | | | | | | We must record the type of a TuplePat after typechecking, just like a ConPatOut, so that desugaring works correctly for GADTs. See comments with the declaration of HsPat.TuplePat, and test gadt15
* Improve error reporting in Core Lintsimonpj@microsoft.com2006-02-021-22/+33
|
* don't clean ghc-inplace when cleaning stages other than 1Simon Marlow2006-02-021-1/+5
|
* Improve error reporting in typecheckersimonpj@microsoft.com2006-02-012-201/+215
|
* Trim importssimonpj@microsoft.com2006-02-011-1/+1
|
* Yet another fix to an old hi-boot-6 filesimonpj@microsoft.com2006-02-011-1/+1
|
* Kinding wibble in TH bracketssimonpj@microsoft.com2006-01-311-2/+9
|
* Use extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibrariesDuncan Coutts2005-12-072-2/+14
| | | | Also extend the parser.
* Fix long-standing bug in CPR analysissimonpj@microsoft.com2006-01-311-5/+12
| | | | | | | | | | | | | MERGE TO STABLE For a long time (2002!) the CPR analysis done by dmdAnalTopRhs has been bogus. In particular, it's possible for a newtype constructor to look CPR-ish when it simply isn't. This fixes it. Test is stranal/newtype
* More hi-boot-6 updatessimonpj@microsoft.com2006-01-312-4/+4
|
* Fix TcUnify.subFunTys in AppTy casesimonpj@microsoft.com2006-01-314-21/+41
| | | | | | | | | | | | | subFunTys wasn't dealing correctly with the case where the type to be split was of form (a ty1), where a is a type variable. This shows up when compiling Control.Arrow.Transformer.Stream in package arrows. This commit fixes it.
* Error message wibblesimonpj@microsoft.com2006-01-301-4/+1
|
* Add mkHsCoerce to avoid junk in typechecked codesimonpj@microsoft.com2006-01-305-16/+25
| | | | | | | | Avoiding identity coercions is a Good Thing generally, but it turns out that the desugarer has trouble recognising 'otherwise' and 'True' guards if they are wrapped in an identity coercion; and that leads to bogus overlap warnings.
* Improve error messsage when argument count variessimonpj@microsoft.com2006-01-301-8/+13
|
* Fix hi-boot file for earlier versions of GHCsimonpj@microsoft.com2006-01-271-9/+4
|
* Fix typo in boxy matchingsimonpj@microsoft.com2006-01-271-1/+1
|
* Simon's big boxy-type commitsimonpj@microsoft.com2006-01-2564-3345/+3853
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This very large commit adds impredicativity to GHC, plus numerous other small things. *** WARNING: I have compiled all the libraries, and *** a stage-2 compiler, and everything seems *** fine. But don't grab this patch if you *** can't tolerate a hiccup if something is *** broken. The big picture is this: a) GHC handles impredicative polymorphism, as described in the "Boxy types: type inference for higher-rank types and impredicativity" paper b) GHC handles GADTs in the new simplified (and very sligtly less epxrssive) way described in the "Simple unification-based type inference for GADTs" paper But there are lots of smaller changes, and since it was pre-Darcs they are not individually recorded. Some things to watch out for: c) The story on lexically-scoped type variables has changed, as per my email. I append the story below for completeness, but I am still not happy with it, and it may change again. In particular, the new story does not allow a pattern-bound scoped type variable to be wobbly, so (\(x::[a]) -> ...) is usually rejected. This is more restrictive than before, and we might loosen up again. d) A consequence of adding impredicativity is that GHC is a bit less gung ho about converting automatically between (ty1 -> forall a. ty2) and (forall a. ty1 -> ty2) In particular, you may need to eta-expand some functions to make typechecking work again. Furthermore, functions are now invariant in their argument types, rather than being contravariant. Again, the main consequence is that you may occasionally need to eta-expand function arguments when using higher-rank polymorphism. Please test, and let me know of any hiccups Scoped type variables in GHC ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ January 2006 0) Terminology. A *pattern binding* is of the form pat = rhs A *function binding* is of the form f pat1 .. patn = rhs A binding of the formm var = rhs is treated as a (degenerate) *function binding*. A *declaration type signature* is a separate type signature for a let-bound or where-bound variable: f :: Int -> Int A *pattern type signature* is a signature in a pattern: \(x::a) -> x f (x::a) = x A *result type signature* is a signature on the result of a function definition: f :: forall a. [a] -> a head (x:xs) :: a = x The form x :: a = rhs is treated as a (degnerate) function binding with a result type signature, not as a pattern binding. 1) The main invariants: A) A lexically-scoped type variable always names a (rigid) type variable (not an arbitrary type). THIS IS A CHANGE. Previously, a scoped type variable named an arbitrary *type*. B) A type signature always describes a rigid type (since its free (scoped) type variables name rigid type variables). This is also a change, a consequence of (A). C) Distinct lexically-scoped type variables name distinct rigid type variables. This choice is open; 2) Scoping 2(a) If a declaration type signature has an explicit forall, those type variables are brought into scope in the right hand side of the corresponding binding (plus, for function bindings, the patterns on the LHS). f :: forall a. a -> [a] f (x::a) = [x :: a, x] Both occurences of 'a' in the second line are bound by the 'forall a' in the first line A declaration type signature *without* an explicit top-level forall is implicitly quantified over all the type variables that are mentioned in the type but not already in scope. GHC's current rule is that this implicit quantification does *not* bring into scope any new scoped type variables. f :: a -> a f x = ...('a' is not in scope here)... This gives compatibility with Haskell 98 2(b) A pattern type signature implicitly brings into scope any type variables mentioned in the type that are not already into scope. These are called *pattern-bound type variables*. g :: a -> a -> [a] g (x::a) (y::a) = [y :: a, x] The pattern type signature (x::a) brings 'a' into scope. The 'a' in the pattern (y::a) is bound, as is the occurrence on the RHS. A pattern type siganture is the only way you can bring existentials into scope. data T where MkT :: forall a. a -> (a->Int) -> T f x = case x of MkT (x::a) f -> f (x::a) 2a) QUESTION class C a where op :: forall b. b->a->a instance C (T p q) where op = <rhs> Clearly p,q are in scope in <rhs>, but is 'b'? Not at the moment. Nor can you add a type signature for op in the instance decl. You'd have to say this: instance C (T p q) where op = let op' :: forall b. ... op' = <rhs> in op' 3) A pattern-bound type variable is allowed only if the pattern's expected type is rigid. Otherwise we don't know exactly *which* skolem the scoped type variable should be bound to, and that means we can't do GADT refinement. This is invariant (A), and it is a big change from the current situation. f (x::a) = x -- NO; pattern type is wobbly g1 :: b -> b g1 (x::b) = x -- YES, because the pattern type is rigid g2 :: b -> b g2 (x::c) = x -- YES, same reason h :: forall b. b -> b h (x::b) = x -- YES, but the inner b is bound k :: forall b. b -> b k (x::c) = x -- NO, it can't be both b and c 3a) You cannot give different names for the same type variable in the same scope (Invariant (C)): f1 :: p -> p -> p -- NO; because 'a' and 'b' would be f1 (x::a) (y::b) = (x::a) -- bound to the same type variable f2 :: p -> p -> p -- OK; 'a' is bound to the type variable f2 (x::a) (y::a) = (x::a) -- over which f2 is quantified -- NB: 'p' is not lexically scoped f3 :: forall p. p -> p -> p -- NO: 'p' is now scoped, and is bound to f3 (x::a) (y::a) = (x::a) -- to the same type varialble as 'a' f4 :: forall p. p -> p -> p -- OK: 'p' is now scoped, and its occurences f4 (x::p) (y::p) = (x::p) -- in the patterns are bound by the forall 3b) You can give a different name to the same type variable in different disjoint scopes, just as you can (if you want) give diferent names to the same value parameter g :: a -> Bool -> Maybe a g (x::p) True = Just x :: Maybe p g (y::q) False = Nothing :: Maybe q 3c) Scoped type variables respect alpha renaming. For example, function f2 from (3a) above could also be written: f2' :: p -> p -> p f2' (x::b) (y::b) = x::b where the scoped type variable is called 'b' instead of 'a'. 4) Result type signatures obey the same rules as pattern types signatures. In particular, they can bind a type variable only if the result type is rigid f x :: a = x -- NO g :: b -> b g x :: b = x -- YES; binds b in rhs 5) A *pattern type signature* in a *pattern binding* cannot bind a scoped type variable (x::a, y) = ... -- Legal only if 'a' is already in scope Reason: in type checking, the "expected type" of the LHS pattern is always wobbly, so we can't bind a rigid type variable. (The exception would be for an existential type variable, but existentials are not allowed in pattern bindings either.) Even this is illegal f :: forall a. a -> a f x = let ((y::b)::a, z) = ... in Here it looks as if 'b' might get a rigid binding; but you can't bind it to the same skolem as a. 6) Explicitly-forall'd type variables in the *declaration type signature(s)* for a *pattern binding* do not scope AT ALL. x :: forall a. a->a -- NO; the forall a does Just (x::a->a) = Just id -- not scope at all y :: forall a. a->a Just y = Just (id :: a->a) -- NO; same reason THIS IS A CHANGE, but one I bet that very few people will notice. Here's why: strange :: forall b. (b->b,b->b) strange = (id,id) x1 :: forall a. a->a y1 :: forall b. b->b (x1,y1) = strange This is legal Haskell 98 (modulo the forall). If both 'a' and 'b' both scoped over the RHS, they'd get unified and so cannot stand for distinct type variables. One could *imagine* allowing this: x2 :: forall a. a->a y2 :: forall a. a->a (x2,y2) = strange using the very same type variable 'a' in both signatures, so that a single 'a' scopes over the RHS. That seems defensible, but odd, because though there are two type signatures, they introduce just *one* scoped type variable, a. 7) Possible extension. We might consider allowing \(x :: [ _ ]) -> <expr> where "_" is a wild card, to mean "x has type list of something", without naming the something.
* add double colon and double arrow symbols (-fglasgow-exts)Simon Marlow2006-01-251-0/+2
|
* Fix conDeclFVs for GADTs, to fix bogus unused-import warningsimonpj@microsoft.com2006-01-251-9/+7
|
* make the par# primop actually do somethingSimon Marlow2006-01-241-2/+18
|
* send usage info to stdout, not stderrSimon Marlow2006-01-241-2/+2
|
* Better error message for Template Haskell pattern bracketssimonpj@microsoft.com2006-01-231-0/+3
|
* Fix for feature request #655 (Loading the GHC library from GHCi.)Lemmih2006-01-235-43/+87
| | | | | | Moved the utility functions out of hschooks, avoided linking the GHC library with hschooks.o and added a couple of symbols to the linkers export list.
* [project @ 2006-01-19 16:15:58 by simonmar]final_switch_to_darcs,_this_repo_is_now_livesimonmar2006-01-191-0/+3
| | | | omit the Main module from libHSghc.a
* [project @ 2006-01-19 16:11:04 by simonmar]simonmar2006-01-191-0/+1
| | | | exposed-modules should include Config
* [project @ 2006-01-18 12:16:06 by simonpj]simonpj2006-01-182-4/+10
| | | | Check for constructors in type signatures
* [project @ 2006-01-18 12:15:37 by simonpj]simonpj2006-01-186-57/+7
| | | | Expunge all mention of CCallable/CReturnable
* [project @ 2006-01-18 11:13:06 by simonpj]simonpj2006-01-181-2/+4
| | | | Ghci wibble; weaken assert
* [project @ 2006-01-18 10:59:54 by simonmar]simonmar2006-01-181-1/+0
| | | | Remove dead panic
* [project @ 2006-01-18 10:58:15 by simonmar]simonmar2006-01-181-1/+0
| | | | | | Remove dead error (darcs patch from Ian Lynagh)