GHC:fe108ff1b0d4b52679ba6deddadf5d2fb3fa8f22 commitshttps://gitlab.haskell.org/trac-jberryman/ghc/-/commits/fe108ff1b0d4b52679ba6deddadf5d2fb3fa8f222006-02-02T12:43:27+00:00https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/fe108ff1b0d4b52679ba6deddadf5d2fb3fa8f22Improve error reporting in Core Lint2006-02-02T12:43:27+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/2f0d9b271c16303f1f7f97b35df721fbbebd1caedon't clean ghc-inplace when cleaning stages other than 12006-02-02T12:43:59+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/4c7b8ec3e7852f88f4c355de2745dc594d120819Improve error reporting in typechecker2006-02-01T17:03:32+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/21044c2db566270297baef26c0a8d9228e66af7cTrim imports2006-02-01T17:02:48+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/5ca2f4dd447e8961e2ae09c0a45f4bd45d015411Yet another fix to an old hi-boot-6 file2006-02-01T10:55:44+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/cebe3ed020cfe403c809545d94bd6b416785f11dKinding wibble in TH brackets2006-01-31T17:57:30+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/8002c9d5ceafef6b8fa6765701c5c3103c69760cUse extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibraries2005-12-07T10:56:54+00:00Duncan Couttsduncan.coutts@worc.ox.ac.ukAlso extend the parser.https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/d4c88dc2a31d9ee8dd04b4f61ac1a3edcc1918d5combine libraries/.darcs-boring and .darcs-boring2006-01-31T16:15:30+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/95c13506a9988cfe613618ef5c76fe95f4048d22Fix long-standing bug in CPR analysis2006-01-31T15:32:47+00:00simonpj@microsoft.comunknown
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
https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/8f0a33dd7c6c054df760d4c728677d3ed87b02edMore hi-boot-6 updates2006-01-31T13:09:26+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/c362e21663e6222c01be3106c80ea9452c4ae222Fix TcUnify.subFunTys in AppTy case2006-01-31T12:24:20+00:00simonpj@microsoft.comunknown
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.
https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/0c88fe0000481527a0a9f6305512ac2f605340d5Error message wibble2006-01-30T16:36:51+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/eb57096f08bbccf59e6551b135fbde5ed22a0fa8Add mkHsCoerce to avoid junk in typechecked code2006-01-30T13:12:31+00:00simonpj@microsoft.comunknown
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.
https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/4417e97d436e2796bed886cb1a830acb88d3da28Improve error messsage when argument count varies2006-01-30T13:11:33+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/a0f8de19ed0c87abe16a7008a444f8563b351dd1fix bug #664 in printSample()2006-01-30T11:53:01+00:00Simon Marlowsimonmar@microsoft.comprintSample() was attempting to round the fractional part of the time,
but not propagated to the non-fractional part. It's probably better not
to attempt to round the time at all.https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/fa2879a0a740ee3c3860822ff5bb93c97d4d6af6Fix hi-boot file for earlier versions of GHC2006-01-27T17:50:40+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/db5031360e21a654c6457f71df60af26ac205f44Fix typo in boxy matching2006-01-27T17:45:36+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/19334330dc8d6689d2a8d1a4324db0d984f175e0fix one case where -q wasn't honoured2006-01-27T10:47:15+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/bfd03f0e261b7cb73eef653b36a8051066e496d5Check for GMP.framework on all Darwin platforms, not just PPC2006-01-26T07:15:04+00:00wolfgang.thaller@gmx.netunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/ac10f8408520a30e8437496d320b8b86afda2e8fSimon's big boxy-type commit2006-01-25T16:28:32+00:00simonpj@microsoft.comunknown
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.
https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/479cc24837aa2c14c3bbed323bb640a5c53a2522add double colon and double arrow symbols (-fglasgow-exts)2006-01-25T13:55:01+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/9db74caf09e2e0a5387d63499de87579d83835cbFix conDeclFVs for GADTs, to fix bogus unused-import warning2006-01-25T09:09:57+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/3cc8487e0305174ce98b70607b3a81f50308369bmake the par# primop actually do something2006-01-24T16:25:21+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/33482c1554552c7ef0d6cbb0fda1bb1d6355c21eUpdate Cachegrind support for changes to the Valgrind CLI2006-01-24T15:47:32+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/3db62c3af730763b7ea40f927ca3a021aa2f7406send usage info to stdout, not stderr2006-01-24T14:55:51+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/89408a89fa2ea7d5977498e27983f7d00dc1d857primop-docs2006-01-22T22:24:46+00:00Dinko Tenevdinko.tenev@gmail.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/78bdcf14e059dc193bde45fb7274536f29a5ef79remove old CVS stuff, replace with darcs2006-01-20T15:13:22+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/9d909b3bb9a0740f272dadf4a35b642e1404fe3cimplement clean/dirty TSOs2006-01-23T16:49:30+00:00Simon Marlowsimonmar@microsoft.comAlong the lines of the clean/dirty arrays and IORefs implemented
recently, now threads are marked clean or dirty depending on whether
they need to be scanned during a minor GC or not. This should speed
up GC when there are lots of threads, especially if most of them are
idle.https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/380148608fa354ac972d45aa933400a1a5c4dd7fBetter error message for Template Haskell pattern brackets2006-01-23T14:28:38+00:00simonpj@microsoft.comunknownhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/5abbf7b537b828d150969d7e3d51ec44562357bfremove old comment2006-01-23T14:05:30+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/65691f95b3727c277a24ec5f0d5a4058c9a681e2Fix for feature request #655 (Loading the GHC library from GHCi.)2006-01-23T11:06:25+00:00Lemmihlemmih@gmail.comMoved 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.https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/95c7525626b8802ec21036a82037e933caf0b17fMake hsc2hs emit the full path name in {-# LINE #-} pagmas.2006-01-22T01:18:31+00:00Duncan Couttsduncan.coutts@worc.ox.ac.ukFor one thing this is the right thing to do anyway, it's what other tools do.
Secondly it allows haddock to produce accurate source code links.https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/c1ae3106dfcefbe55a9355c28bd0465564fa0162MFLAGS += -f Makefile2006-01-23T09:48:37+00:00Simon Marlowsimonmar@microsoft.commerged from CVS, because Tailor isn't merging the libraries subdirhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/7b667aaef31c75bede4443e9686039d07b2ff409undo accidental commit of snapshot version2006-01-22T17:58:17+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/58a4c0d2cc47a86a9626329143a1539a2952b96c[project @ 2006-01-19 16:15:58 by simonmar]2006-01-19T16:15:58+00:00simonmarunknownomit the Main module from libHSghc.ahttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/1fb41f16d88ea46186e5d7c882a0cf2462994805[project @ 2006-01-19 16:11:04 by simonmar]2006-01-19T16:11:04+00:00simonmarunknownexposed-modules should include Confighttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/a106bbffa1188d62bb86e357714bbe4acdecd37e[project @ 2006-01-19 02:15:38 by sof]2006-01-19T02:15:38+00:00sofunknowntryPutMVarzh_fast: make it work in the non-full case.
Merge to STABLE.https://gitlab.haskell.org/trac-jberryman/ghc/-/commit/f8dd6b45f393bc0742782cd705545971ba2205betest2006-01-19T16:41:55+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/abd6576d1b73060cf9d02122e926c10b3b36ae73respect the -q switch in this script2006-01-19T09:57:59+00:00Simon Marlowsimonmar@microsoft.comhttps://gitlab.haskell.org/trac-jberryman/ghc/-/commit/44deb23d9a1e9a28554f26eed85e76cb1c77220eHack around whatsnew failing if there are no changes2006-01-13T23:12:49+00:00Ian Lynaghigloo@earth.li