ghc-hetmet.git
18 years agooops, undo accidental addition of package-time settings
Simon Marlow [Fri, 24 Feb 2006 14:30:51 +0000 (14:30 +0000)]
oops, undo accidental addition of package-time settings

18 years agoturn off a trace
Simon Marlow [Fri, 24 Feb 2006 12:46:08 +0000 (12:46 +0000)]
turn off a trace

18 years agoadd instance Outputable CLabel
Simon Marlow [Fri, 24 Feb 2006 12:43:49 +0000 (12:43 +0000)]
add instance Outputable CLabel

18 years ago-O2 implies -optc-O2 now
Simon Marlow [Fri, 24 Feb 2006 12:40:33 +0000 (12:40 +0000)]
-O2 implies -optc-O2 now

18 years agoextract some of the generic C-- optimisations from the NCG
Simon Marlow [Fri, 24 Feb 2006 11:17:53 +0000 (11:17 +0000)]
extract some of the generic C-- optimisations from the NCG

18 years agolag/drag/void: add an extra assertion, and some commentary
Simon Marlow [Thu, 23 Feb 2006 15:51:20 +0000 (15:51 +0000)]
lag/drag/void: add an extra assertion, and some commentary

18 years agolag/drag/void profiling fix
Simon Marlow [Thu, 23 Feb 2006 15:50:46 +0000 (15:50 +0000)]
lag/drag/void profiling fix

We were searching the wrong part of the heap for dead objects, this
was broken by recent changes to the step structure: from-space is now
in step->old_blocks, not step->blocks.  Fortunately some assertions in
ProfHeap picked up the problem.

18 years agoadd (trivial) support for STM objects in lag/drag/void profiling
Simon Marlow [Thu, 23 Feb 2006 15:48:59 +0000 (15:48 +0000)]
add (trivial) support for STM objects in lag/drag/void profiling

18 years agobugfix for LDV profiling on 64-bit platforms
Simon Marlow [Thu, 23 Feb 2006 15:09:04 +0000 (15:09 +0000)]
bugfix for LDV profiling on 64-bit platforms

There was an integer overflow in the definition of LDV_RECORD_CREATE
when StgWord is 64 bits.

18 years agowarning fix
Simon Marlow [Thu, 23 Feb 2006 14:45:37 +0000 (14:45 +0000)]
warning fix

18 years agofurther fix for floating point primitives
Simon Marlow [Thu, 23 Feb 2006 14:30:13 +0000 (14:30 +0000)]
further fix for floating point primitives

18 years agoComment wibbles
simonpj@microsoft.com [Thu, 23 Feb 2006 14:21:01 +0000 (14:21 +0000)]
Comment wibbles

18 years agoWibbles to instance validity checking
simonpj@microsoft.com [Thu, 23 Feb 2006 13:41:54 +0000 (13:41 +0000)]
Wibbles to instance validity checking

18 years agoFix comment
simonpj@microsoft.com [Thu, 23 Feb 2006 13:01:04 +0000 (13:01 +0000)]
Fix comment

18 years agoImprove error reporting for type-improvement errors
simonpj@microsoft.com [Thu, 23 Feb 2006 13:00:29 +0000 (13:00 +0000)]
Improve error reporting for type-improvement errors

18 years agoReject polytypes in instance declarations (for now anyway)
simonpj@microsoft.com [Thu, 23 Feb 2006 12:59:58 +0000 (12:59 +0000)]
Reject polytypes in instance declarations (for now anyway)

18 years agoRemove duplicate comment
simonpj@microsoft.com [Fri, 10 Feb 2006 10:40:28 +0000 (10:40 +0000)]
Remove duplicate comment

18 years agoAdd renamed fixities to HsGroup.
Lemmih [Wed, 22 Feb 2006 17:36:48 +0000 (17:36 +0000)]
Add renamed fixities to HsGroup.

18 years agooops, initialize atomic_modify_mutvar_mutex
Simon Marlow [Wed, 22 Feb 2006 16:38:27 +0000 (16:38 +0000)]
oops, initialize atomic_modify_mutvar_mutex

18 years agocheck black holes before doing GC in scheduleDoHeapProfile()
Simon Marlow [Wed, 22 Feb 2006 16:07:33 +0000 (16:07 +0000)]
check black holes before doing GC in scheduleDoHeapProfile()

fixes #687, see comment for details.

18 years agofix for ASSIGN_BaseReg() in the unregisterised way
Simon Marlow [Wed, 22 Feb 2006 14:18:36 +0000 (14:18 +0000)]
fix for ASSIGN_BaseReg() in the unregisterised way

18 years agofloating-point fix for x86_64
Simon Marlow [Wed, 22 Feb 2006 14:07:19 +0000 (14:07 +0000)]
floating-point fix for x86_64

For 32-bit float primtives like sinFloat#, we currently call the
double versions of the C library functions (sin(), cos() etc.).  It
seems more correct to call the float versions (sinf(), cosf() etc.).
This makes a difference on x86_64, I'm not entirely sure why, but this
way at least generates more consistent results and avoids extra
promotion/demotion instructions when calling these primitives.

18 years agofix a deadlock in atomicModifyMutVar#
Simon Marlow [Tue, 21 Feb 2006 16:37:11 +0000 (16:37 +0000)]
fix a deadlock in atomicModifyMutVar#

atomicModifyMutVar# was re-using the storage manager mutex (sm_mutex)
to get its atomicity guarantee in SMP mode. But recently the addition
of a call to dirty_MUT_VAR() to implement the read barrier lead to a
rare deadlock case, because dirty_MUT_VAR() very occasionally needs to
allocate a new block to chain on the mutable list, which requires
sm_mutex.

18 years agowarning fix
Simon Marlow [Tue, 21 Feb 2006 16:33:08 +0000 (16:33 +0000)]
warning fix

18 years agoMention the 'Encoding' module in package.conf.in
Lemmih [Tue, 21 Feb 2006 10:51:47 +0000 (10:51 +0000)]
Mention the 'Encoding' module in package.conf.in

18 years agoLoosen the rules for instance declarations (Part 3)
Ross Paterson [Mon, 13 Feb 2006 16:10:44 +0000 (16:10 +0000)]
Loosen the rules for instance declarations (Part 3)

Relax the restrictions on derived instances in the same way, so we
can write

data MinHeap h a = H a (h a) deriving (Show)

18 years agoIf we don't have libreadline then we need some dummy definition for complete* functions.
kr.angelov@gmail.com [Sun, 12 Feb 2006 09:50:19 +0000 (09:50 +0000)]
If we don't have libreadline then we need some dummy definition for complete* functions.

18 years agoSMP bugfix: reload capability from task->cap after scheduleDoGC
wolfgang.thaller@gmx.net [Sun, 12 Feb 2006 03:47:36 +0000 (03:47 +0000)]
SMP bugfix: reload capability from task->cap after scheduleDoGC

18 years agoSMP support (xchg(), cas() and mb()) for PowerPC
wolfgang.thaller@gmx.net [Sun, 12 Feb 2006 03:33:52 +0000 (03:33 +0000)]
SMP support (xchg(), cas() and mb()) for PowerPC

18 years agoBugfix in completion code for :set and :unset.
Lemmih [Fri, 10 Feb 2006 18:13:19 +0000 (18:13 +0000)]
Bugfix in completion code for :set and :unset.

18 years agoCompletion for :set, :unset and :undef.
Lemmih [Fri, 10 Feb 2006 17:17:28 +0000 (17:17 +0000)]
Completion for :set, :unset and :undef.

18 years agooops, forgot some more SMP->THREADED_RTS conversions
Simon Marlow [Fri, 10 Feb 2006 15:32:36 +0000 (15:32 +0000)]
oops, forgot some more SMP->THREADED_RTS conversions

18 years agofix test for REG_BaseReg (it's spelled REG_Base)
Simon Marlow [Fri, 10 Feb 2006 12:35:52 +0000 (12:35 +0000)]
fix test for REG_BaseReg (it's spelled REG_Base)

18 years agoChange CVS for _darcs in dirs to prune during make dist
Duncan Coutts [Thu, 9 Feb 2006 09:32:04 +0000 (09:32 +0000)]
Change CVS for _darcs in dirs to prune during make dist

18 years agofix for dirty_MUT_VAR: don't try to recordMutableCap in gen 0
Simon Marlow [Fri, 10 Feb 2006 12:00:21 +0000 (12:00 +0000)]
fix for dirty_MUT_VAR: don't try to recordMutableCap in gen 0

18 years agoSTM fix from Tim Harris
Simon Marlow [Fri, 10 Feb 2006 11:21:11 +0000 (11:21 +0000)]
STM fix from Tim Harris

Fixes assertion failures with STM and -debug.  Tim says:
Sorry, it's a problem in how nested transactions are handled in
non-SMP builds.  It'll bite when trying to commit a nested transaction
which has read from a TVar but not updated it.

The call to validate_and_acquire_ownership in
stmCommitNestedTransaction should be the same as that in
stmCommitNestedTransaction, i.e.:

  result = validate_and_acquire_ownership(trec, (!use_read_phase), TRUE);

18 years agoimprovement to the deadlock detection
Simon Marlow [Thu, 9 Feb 2006 12:30:56 +0000 (12:30 +0000)]
improvement to the deadlock detection

When the RTS is idle, as detected by the timer signal, instead of
prodding capabilities from the signal handler (which is not guaranteed
to work - pthread_cond_signal() can't be called from signal handlers),
create a new thread to do it.

18 years agoSimplify the -B handling. The interface to the ghc library has changed slightly.
Lemmih [Fri, 10 Feb 2006 09:46:01 +0000 (09:46 +0000)]
Simplify the -B handling. The interface to the ghc library has changed slightly.

18 years agoFix desugaring of unboxed tuples
simonpj@microsoft.com [Thu, 9 Feb 2006 17:53:28 +0000 (17:53 +0000)]
Fix desugaring of unboxed tuples

This patch is a slightly-unsatisfactory fix to desugaring unboxed
tuples; it fixes ds057 which has been failing for some time.

Unsatisfactory because rather ad hoc -- but that applies to lots
of the unboxed tuple stuff.

18 years agox86_64: fix case of out-of-range operands to leaq
Simon Marlow [Thu, 9 Feb 2006 16:22:47 +0000 (16:22 +0000)]
x86_64: fix case of out-of-range operands to leaq

18 years agoMerge the smp and threaded RTS ways
Simon Marlow [Thu, 9 Feb 2006 15:44:49 +0000 (15:44 +0000)]
Merge the smp and threaded RTS ways

Now, the threaded RTS also includes SMP support.  The -smp flag is a
synonym for -threaded.  The performance implications of this are small
to negligible, and it results in a code cleanup and reduces the number
of combinations we have to test.

18 years agochange dirty_MUT_VAR() to use recordMutableCap()
Simon Marlow [Thu, 9 Feb 2006 15:04:20 +0000 (15:04 +0000)]
change dirty_MUT_VAR() to use recordMutableCap()
rather than recordMutableGen(), the former works better in SMP

18 years agoimprovement to the deadlock detection
Simon Marlow [Thu, 9 Feb 2006 12:30:56 +0000 (12:30 +0000)]
improvement to the deadlock detection

When the RTS is idle, as detected by the timer signal, instead of
prodding capabilities from the signal handler (which is not guaranteed
to work - pthread_cond_signal() can't be called from signal handlers),
create a new thread to do it.

18 years agoFix typo
simonpj@microsoft.com [Thu, 9 Feb 2006 12:42:08 +0000 (12:42 +0000)]
Fix typo

18 years agoFix instance rules for functional dependencies
simonpj@microsoft.com [Thu, 9 Feb 2006 11:35:31 +0000 (11:35 +0000)]
Fix instance rules for functional dependencies

GHC 6.4 implements a rather relaxed version of the Coverage Condition
which is actually too relaxed: the compiler can get into an infinite loop
as a result.

This commit fixes the problem (see Note [Coverage condition] in FunDeps.lhs)
and documents the change.

I also took the opportunity to add documentation about functional dependencies,
taken from the Hugs manual with kind permission of Mark Jones

18 years agofix for the unregisterised way
Simon Marlow [Thu, 9 Feb 2006 10:50:58 +0000 (10:50 +0000)]
fix for the unregisterised way

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.

18 years agoprof/smp combination probably doesn't work, disable it
Simon Marlow [Thu, 9 Feb 2006 10:48:15 +0000 (10:48 +0000)]
prof/smp combination probably doesn't work, disable it

18 years agotiny panic msg fix
Simon Marlow [Thu, 9 Feb 2006 10:25:40 +0000 (10:25 +0000)]
tiny panic msg fix

18 years agoLoosen the rules for instance declarations (Part 2)
simonpj@microsoft.com [Thu, 9 Feb 2006 10:21:29 +0000 (10:21 +0000)]
Loosen the rules for instance declarations (Part 2)

Tidying up to Ross's  patch, plus adding documenation for it.

18 years agorelaxed instance termination test
Ross Paterson [Mon, 6 Feb 2006 11:16:51 +0000 (11:16 +0000)]
relaxed instance termination test

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.

18 years agoFix CPP failure by adding space before hASH_TBL_SIZE
simonpj@microsoft.com [Thu, 9 Feb 2006 09:37:04 +0000 (09:37 +0000)]
Fix CPP failure by adding space before hASH_TBL_SIZE

18 years agoan LDV profiling fix (might just fix ASSERTIONs, I'm not sure)
Simon Marlow [Wed, 8 Feb 2006 17:07:44 +0000 (17:07 +0000)]
an LDV profiling fix (might just fix ASSERTIONs, I'm not sure)

18 years agoDo type refinement in TcIface
simonpj@microsoft.com [Wed, 8 Feb 2006 15:44:12 +0000 (15:44 +0000)]
Do type refinement in TcIface

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.)

18 years agoAdd mapOccEnv
simonpj@microsoft.com [Wed, 8 Feb 2006 15:43:43 +0000 (15:43 +0000)]
Add mapOccEnv

18 years agoA little more debug printing
simonpj@microsoft.com [Wed, 8 Feb 2006 15:07:01 +0000 (15:07 +0000)]
A little more debug printing

18 years agoShow types of case result when debug is on
simonpj@microsoft.com [Wed, 8 Feb 2006 15:03:57 +0000 (15:03 +0000)]
Show types of case result when debug is on

18 years agofix installation of binary dist when the PS docs aren't present
Simon Marlow [Wed, 8 Feb 2006 15:32:59 +0000 (15:32 +0000)]
fix installation of binary dist when the PS docs aren't present

Fixes #660

18 years agofix a bug in closure_sizeW_()
Simon Marlow [Wed, 8 Feb 2006 14:54:51 +0000 (14:54 +0000)]
fix a bug in closure_sizeW_()

18 years agomake the smp way RTS-only, normal libraries now work with -smp
Simon Marlow [Wed, 8 Feb 2006 14:33:48 +0000 (14:33 +0000)]
make the smp way RTS-only, normal libraries now work with -smp

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.

18 years agoadd -dfaststring-stats to dump some stats about the FastString hash table
Simon Marlow [Wed, 8 Feb 2006 13:10:18 +0000 (13:10 +0000)]
add -dfaststring-stats to dump some stats about the FastString hash table

18 years agofix a warning
Simon Marlow [Tue, 7 Feb 2006 13:23:23 +0000 (13:23 +0000)]
fix a warning

18 years agocatch up with changes to Distribution.ParseUtils.ParseResult
Simon Marlow [Tue, 7 Feb 2006 11:11:11 +0000 (11:11 +0000)]
catch up with changes to Distribution.ParseUtils.ParseResult

18 years agoWibble to type signature
simonpj@microsoft.com [Tue, 7 Feb 2006 17:12:54 +0000 (17:12 +0000)]
Wibble to type signature

18 years agoEmpty forall should disable implicit quantification
simonpj@microsoft.com [Tue, 7 Feb 2006 08:51:37 +0000 (08:51 +0000)]
Empty forall should disable implicit quantification

18 years agoRemove unused constructor in SourceTypeCtxt
simonpj@microsoft.com [Mon, 6 Feb 2006 11:20:31 +0000 (11:20 +0000)]
Remove unused constructor in SourceTypeCtxt

18 years agoBasic completion in GHCi
Simon Marlow [Mon, 6 Feb 2006 12:26:54 +0000 (12:26 +0000)]
Basic completion in GHCi

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.

18 years agoImprove error report for pattern guards
simonpj@microsoft.com [Mon, 6 Feb 2006 10:17:30 +0000 (10:17 +0000)]
Improve error report for pattern guards

18 years agoAdd bang patterns
simonpj@microsoft.com [Fri, 3 Feb 2006 17:51:08 +0000 (17:51 +0000)]
Add bang patterns

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

18 years agoAdd Bag.anyBag (analogous to List.any)
simonpj@microsoft.com [Fri, 3 Feb 2006 17:46:27 +0000 (17:46 +0000)]
Add Bag.anyBag (analogous to List.any)

18 years agoDeal correctly with lazy patterns and GADTs
simonpj@microsoft.com [Thu, 2 Feb 2006 13:04:09 +0000 (13:04 +0000)]
Deal correctly with lazy patterns and GADTs

18 years agoRecord the type in TuplePat (necessary for GADTs)
simonpj@microsoft.com [Thu, 2 Feb 2006 12:44:05 +0000 (12:44 +0000)]
Record the type in TuplePat (necessary for GADTs)

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

18 years agoImprove error reporting in Core Lint
simonpj@microsoft.com [Thu, 2 Feb 2006 12:43:27 +0000 (12:43 +0000)]
Improve error reporting in Core Lint

18 years agodon't clean ghc-inplace when cleaning stages other than 1
Simon Marlow [Thu, 2 Feb 2006 12:43:59 +0000 (12:43 +0000)]
don't clean ghc-inplace when cleaning stages other than 1

18 years agoImprove error reporting in typechecker
simonpj@microsoft.com [Wed, 1 Feb 2006 17:03:32 +0000 (17:03 +0000)]
Improve error reporting in typechecker

18 years agoTrim imports
simonpj@microsoft.com [Wed, 1 Feb 2006 17:02:48 +0000 (17:02 +0000)]
Trim imports

18 years agoYet another fix to an old hi-boot-6 file
simonpj@microsoft.com [Wed, 1 Feb 2006 10:55:44 +0000 (10:55 +0000)]
Yet another fix to an old hi-boot-6 file

18 years agoKinding wibble in TH brackets
simonpj@microsoft.com [Tue, 31 Jan 2006 17:57:30 +0000 (17:57 +0000)]
Kinding wibble in TH brackets

18 years agoUse extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibraries
Duncan Coutts [Wed, 7 Dec 2005 10:56:54 +0000 (10:56 +0000)]
Use extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibraries
Also extend the parser.

18 years agocombine libraries/.darcs-boring and .darcs-boring
Simon Marlow [Tue, 31 Jan 2006 16:15:30 +0000 (16:15 +0000)]
combine libraries/.darcs-boring and .darcs-boring

18 years agoFix long-standing bug in CPR analysis
simonpj@microsoft.com [Tue, 31 Jan 2006 15:32:47 +0000 (15:32 +0000)]
Fix long-standing bug in CPR analysis

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

18 years agoMore hi-boot-6 updates
simonpj@microsoft.com [Tue, 31 Jan 2006 13:09:26 +0000 (13:09 +0000)]
More hi-boot-6 updates

18 years agoFix TcUnify.subFunTys in AppTy case
simonpj@microsoft.com [Tue, 31 Jan 2006 12:24:20 +0000 (12:24 +0000)]
Fix TcUnify.subFunTys in AppTy case

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.

18 years agoError message wibble
simonpj@microsoft.com [Mon, 30 Jan 2006 16:36:51 +0000 (16:36 +0000)]
Error message wibble

18 years agoAdd mkHsCoerce to avoid junk in typechecked code
simonpj@microsoft.com [Mon, 30 Jan 2006 13:12:31 +0000 (13:12 +0000)]
Add mkHsCoerce to avoid junk in typechecked code

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.

18 years agoImprove error messsage when argument count varies
simonpj@microsoft.com [Mon, 30 Jan 2006 13:11:33 +0000 (13:11 +0000)]
Improve error messsage when argument count varies

18 years agofix bug #664 in printSample()
Simon Marlow [Mon, 30 Jan 2006 11:53:01 +0000 (11:53 +0000)]
fix bug #664 in printSample()
printSample() 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.

18 years agoFix hi-boot file for earlier versions of GHC
simonpj@microsoft.com [Fri, 27 Jan 2006 17:50:40 +0000 (17:50 +0000)]
Fix hi-boot file for earlier versions of GHC

18 years agoFix typo in boxy matching
simonpj@microsoft.com [Fri, 27 Jan 2006 17:45:36 +0000 (17:45 +0000)]
Fix typo in boxy matching

18 years agofix one case where -q wasn't honoured
Simon Marlow [Fri, 27 Jan 2006 10:47:15 +0000 (10:47 +0000)]
fix one case where -q wasn't honoured

18 years agoCheck for GMP.framework on all Darwin platforms, not just PPC
wolfgang.thaller@gmx.net [Thu, 26 Jan 2006 07:15:04 +0000 (07:15 +0000)]
Check for GMP.framework on all Darwin platforms, not just PPC

18 years agoSimon's big boxy-type commit
simonpj@microsoft.com [Wed, 25 Jan 2006 16:28:32 +0000 (16:28 +0000)]
Simon's big boxy-type commit

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.

18 years agoadd double colon and double arrow symbols (-fglasgow-exts)
Simon Marlow [Wed, 25 Jan 2006 13:55:01 +0000 (13:55 +0000)]
add double colon and double arrow symbols (-fglasgow-exts)

18 years agoFix conDeclFVs for GADTs, to fix bogus unused-import warning
simonpj@microsoft.com [Wed, 25 Jan 2006 09:09:57 +0000 (09:09 +0000)]
Fix conDeclFVs for GADTs, to fix bogus unused-import warning

18 years agomake the par# primop actually do something
Simon Marlow [Tue, 24 Jan 2006 16:25:21 +0000 (16:25 +0000)]
make the par# primop actually do something

18 years agoUpdate Cachegrind support for changes to the Valgrind CLI
Simon Marlow [Tue, 24 Jan 2006 15:47:32 +0000 (15:47 +0000)]
Update Cachegrind support for changes to the Valgrind CLI

18 years agosend usage info to stdout, not stderr
Simon Marlow [Tue, 24 Jan 2006 14:55:51 +0000 (14:55 +0000)]
send usage info to stdout, not stderr

18 years agoprimop-docs
Dinko Tenev [Sun, 22 Jan 2006 22:24:46 +0000 (22:24 +0000)]
primop-docs

18 years agoremove old CVS stuff, replace with darcs
Simon Marlow [Fri, 20 Jan 2006 15:13:22 +0000 (15:13 +0000)]
remove old CVS stuff, replace with darcs

18 years agoimplement clean/dirty TSOs
Simon Marlow [Mon, 23 Jan 2006 16:49:30 +0000 (16:49 +0000)]
implement clean/dirty TSOs
Along 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.

18 years agoBetter error message for Template Haskell pattern brackets
simonpj@microsoft.com [Mon, 23 Jan 2006 14:28:38 +0000 (14:28 +0000)]
Better error message for Template Haskell pattern brackets