DarcsURL: http://darcs.haskell.org/ghc
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=_"

--=_
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable

Sat Feb 25 21:59:45 GMT Standard Time 2006  claus.reinke@talk21.com
  * these tables have four columns, not three

--=_
Content-Type: text/x-darcs-patch
Content-Transfer-Encoding: quoted-printable
Content-Description: A darcs patch for your repository!


New patches:

[these tables have four columns, not three
claus.reinke@talk21.com**20060225215945] {
hunk ./ghc/docs/users_guide/flags.xml 16
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 97
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 148
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 193
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 262
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 307
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 334
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 369
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 417
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 446
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 479
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 536
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 646
-      <tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+      <tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 813
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 846
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1030
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1089
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1128
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1173
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1201
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1240
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1349
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1429
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1500
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1534
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1562
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
hunk ./ghc/docs/users_guide/flags.xml 1821
-	<tgroup cols=3D"3" align=3D"left" colsep=3D"1" rowsep=3D"1">
+	<tgroup cols=3D"4" align=3D"left" colsep=3D"1" rowsep=3D"1">
}

Context:

[NCG: Fix Typo in Register Allocator Loop Patch
wolfgang.thaller@gmx.net**20060225033954
 =

 Fix previous patch "NCG: Handle loops in register allocator"
 Of course, I broke it when correcting a style problem just before committi=
ng.
] =

[NCG: Handle loops in register allocator
wolfgang.thaller@gmx.net**20060225031434
 =

 Fill in the missing parts in the register allocator so that it can
 handle loops.
 =

 *) The register allocator now runs in the UniqSuppy monad, as it needs
    to be able to generate unique labels for fixup code blocks.
 =

 *) A few functions have been added to RegAllocInfo:
 	mkRegRegMoveInstr -- generates a good old move instruction
 	mkBranchInstr     -- used to be MachCodeGen.genBranch
 	patchJump         -- Change the destination of a jump
 =

 *) The register allocator now makes sure that only one spill slot is used
    for each temporary, even if it is spilled and reloaded several times.
    This obviates the need for memory-to-memory moves in fixup code.
 =

 LIMITATIONS:
 =

 *) The case where the fixup code needs to cyclically permute a group of
    registers is currently unhandled. This will need more work once we come
    accross code where this actually happens.
 =

 *) Register allocation for code with loop is probably very inefficient
    (both at compile-time and at run-time).
 =

 *) We still cannot compile the RTS via NCG, for various other reasons.
 =

] =

[Oops, I got a little trigger happy while trimming package.conf.in.
Lemmih <lemmih@gmail.com>**20060224223704] =

[Prettify parts of RnNames. No change of functionality.
Lemmih <lemmih@gmail.com>**20060224215020] =

[Remove duplicate code from RnNames.
Lemmih <lemmih@gmail.com>**20060224212748] =

[Remove non-existing modules from package.conf.in
Lemmih <lemmih@gmail.com>**20060224203727] =

[Remove some unused bindings frm RnNames.
Lemmih <lemmih@gmail.com>**20060224165409] =

[Rather large refactoring of RnNames.
Lemmih <lemmih@gmail.com>**20060224154704
 =

 This restructoring makes the renamed export and import lists
 available in IDE mode.
 =

] =

[add file to go with "extract some of the generic..." patch
Simon Marlow <simonmar@microsoft.com>**20060224144126] =

[oops, undo accidental addition of package-time settings
Simon Marlow <simonmar@microsoft.com>**20060224143051] =

[turn off a trace
Simon Marlow <simonmar@microsoft.com>**20060224124608] =

[add instance Outputable CLabel
Simon Marlow <simonmar@microsoft.com>**20060224124349] =

[-O2 implies -optc-O2 now
Simon Marlow <simonmar@microsoft.com>**20060224124033] =

[extract some of the generic C-- optimisations from the NCG
Simon Marlow <simonmar@microsoft.com>**20060224111753] =

[lag/drag/void: add an extra assertion, and some commentary
Simon Marlow <simonmar@microsoft.com>**20060223155120] =

[lag/drag/void profiling fix
Simon Marlow <simonmar@microsoft.com>**20060223155046
 =

 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.
] =

[add (trivial) support for STM objects in lag/drag/void profiling
Simon Marlow <simonmar@microsoft.com>**20060223154859] =

[bugfix for LDV profiling on 64-bit platforms
Simon Marlow <simonmar@microsoft.com>**20060223150904
 =

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

[warning fix
Simon Marlow <simonmar@microsoft.com>**20060223144537] =

[further fix for floating point primitives
Simon Marlow <simonmar@microsoft.com>**20060223143013] =

[Comment wibbles
simonpj@microsoft.com**20060223142101] =

[Wibbles to instance validity checking
simonpj@microsoft.com**20060223134154] =

[Fix comment
simonpj@microsoft.com**20060223130104] =

[Improve error reporting for type-improvement errors
simonpj@microsoft.com**20060223130029] =

[Reject polytypes in instance declarations (for now anyway)
simonpj@microsoft.com**20060223125958] =

[Remove duplicate comment
simonpj@microsoft.com**20060210104028] =

[Add renamed fixities to HsGroup.
Lemmih <lemmih@gmail.com>**20060222173648] =

[oops, initialize atomic_modify_mutvar_mutex
Simon Marlow <simonmar@microsoft.com>**20060222163827] =

[check black holes before doing GC in scheduleDoHeapProfile()
Simon Marlow <simonmar@microsoft.com>**20060222160733
 =

 fixes #687, see comment for details.
] =

[fix for ASSIGN_BaseReg() in the unregisterised way
Simon Marlow <simonmar@microsoft.com>**20060222141836] =

[floating-point fix for x86_64
Simon Marlow <simonmar@microsoft.com>**20060222140719
   =

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

] =

[fix a deadlock in atomicModifyMutVar#
Simon Marlow <simonmar@microsoft.com>**20060221163711
 =

 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.
] =

[warning fix
Simon Marlow <simonmar@microsoft.com>**20060221163308] =

[Mention the 'Encoding' module in package.conf.in
Lemmih <lemmih@gmail.com>**20060221105147] =

[Loosen the rules for instance declarations (Part 3)
Ross Paterson <ross@soi.city.ac.uk>**20060213161044
 =

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

 	data MinHeap h a =3D H a (h a) deriving (Show)
] =

[If we don't have libreadline then we need some dummy definition for comple=
te* functions.
kr.angelov@gmail.com**20060212095019] =

[SMP bugfix: reload capability from task->cap after scheduleDoGC
wolfgang.thaller@gmx.net**20060212034736] =

[SMP support (xchg(), cas() and mb()) for PowerPC
wolfgang.thaller@gmx.net**20060212033352] =

[Bugfix in completion code for :set and :unset.
Lemmih <lemmih@gmail.com>**20060210181319] =

[Completion for :set, :unset and :undef.
Lemmih <lemmih@gmail.com>**20060210171728] =

[oops, forgot some more SMP->THREADED_RTS conversions
Simon Marlow <simonmar@microsoft.com>**20060210153236] =

[fix test for REG_BaseReg (it's spelled REG_Base)
Simon Marlow <simonmar@microsoft.com>**20060210123552] =

[Change CVS for _darcs in dirs to prune during make dist
Duncan Coutts <duncan.coutts@worc.ox.ac.uk>**20060209093204] =

[fix for dirty_MUT_VAR: don't try to recordMutableCap in gen 0
Simon Marlow <simonmar@microsoft.com>**20060210120021] =

[STM fix from Tim Harris
Simon Marlow <simonmar@microsoft.com>**20060210112111
 =

 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 =3D validate_and_acquire_ownership(trec, (!use_read_phase), TRUE)=
;
 =

] =

[improvement to the deadlock detection
Simon Marlow <simonmar@microsoft.com>*-20060209123056
 =

 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.
] =

[Simplify the -B handling. The interface to the ghc library has changed sli=
ghtly.
Lemmih <lemmih@gmail.com>**20060210094601] =

[Fix desugaring of unboxed tuples
simonpj@microsoft.com**20060209175328
 =

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

 =

] =

[x86_64: fix case of out-of-range operands to leaq
Simon Marlow <simonmar@microsoft.com>**20060209162247] =

[Merge the smp and threaded RTS ways
Simon Marlow <simonmar@microsoft.com>**20060209154449
 =

 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.
] =

[change dirty_MUT_VAR() to use recordMutableCap()
Simon Marlow <simonmar@microsoft.com>**20060209150420
 rather than recordMutableGen(), the former works better in SMP
] =

[improvement to the deadlock detection
Simon Marlow <simonmar@microsoft.com>**20060209123056
 =

 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.
] =

[Fix typo
simonpj@microsoft.com**20060209124208] =

[Fix instance rules for functional dependencies
simonpj@microsoft.com**20060209113531
 =

 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.lh=
s)
 and documents the change.
 =

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

] =

[fix for the unregisterised way
Simon Marlow <simonmar@microsoft.com>**20060209105058
 =

 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 it
Simon Marlow <simonmar@microsoft.com>**20060209104815] =

[tiny panic msg fix
Simon Marlow <simonmar@microsoft.com>**20060209102540] =

[Loosen the rules for instance declarations (Part 2)
simonpj@microsoft.com**20060209102129
 =

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

 =

] =

[relaxed instance termination test
Ross Paterson <ross@soi.city.ac.uk>**20060206111651
 =

 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, a=
nd
 =

  (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 a=
s
 =

        instance C a
        instance Show (s a) =3D> Show (Sized s a)
        instance (Eq a, Show b) =3D> C2 a b
        instance C2 Int a =3D> C3 Bool [a]
        instance C2 Int a =3D> C3 [a] b
        instance C4 a a =3D> 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_SIZE
simonpj@microsoft.com**20060209093704] =

[an LDV profiling fix (might just fix ASSERTIONs, I'm not sure)
Simon Marlow <simonmar@microsoft.com>**20060208170744] =

[Do type refinement in TcIface
simonpj@microsoft.com**20060208154412
 =

 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=3DBool)
 =

 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 mapOccEnv
simonpj@microsoft.com**20060208154343] =

[A little more debug printing
simonpj@microsoft.com**20060208150701] =

[Show types of case result when debug is on
simonpj@microsoft.com**20060208150357] =

[fix installation of binary dist when the PS docs aren't present
Simon Marlow <simonmar@microsoft.com>**20060208153259
 =

 Fixes #660
] =

[fix a bug in closure_sizeW_()
Simon Marlow <simonmar@microsoft.com>**20060208145451] =

[make the smp way RTS-only, normal libraries now work with -smp
Simon Marlow <simonmar@microsoft.com>**20060208143348
 =

 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 table
Simon Marlow <simonmar@microsoft.com>**20060208131018] =

[fix a warning
Simon Marlow <simonmar@microsoft.com>**20060207132323] =

[catch up with changes to Distribution.ParseUtils.ParseResult
Simon Marlow <simonmar@microsoft.com>**20060207111111] =

[Wibble to type signature
simonpj@microsoft.com**20060207171254] =

[Empty forall should disable implicit quantification
simonpj@microsoft.com**20060207085137] =

[Remove unused constructor in SourceTypeCtxt
simonpj@microsoft.com**20060206112031] =

[Basic completion in GHCi
Simon Marlow <simonmar@microsoft.com>**20060206122654
 =

 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 guards
simonpj@microsoft.com**20060206101730] =

[Add bang patterns
simonpj@microsoft.com**20060203175108
 =

 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/BangPattern=
s
 =

] =

[Add Bag.anyBag (analogous to List.any)
simonpj@microsoft.com**20060203174627] =

[Deal correctly with lazy patterns and GADTs
simonpj@microsoft.com**20060202130409] =

[Record the type in TuplePat (necessary for GADTs)
simonpj@microsoft.com**20060202124405
 =

 We must record the type of a TuplePat after typechecking, just like a ConP=
atOut,
 so that desugaring works correctly for GADTs. See comments with the declar=
ation
 of HsPat.TuplePat, and test gadt15
 =

] =

[Improve error reporting in Core Lint
simonpj@microsoft.com**20060202124327] =

[don't clean ghc-inplace when cleaning stages other than 1
Simon Marlow <simonmar@microsoft.com>**20060202124359] =

[Improve error reporting in typechecker
simonpj@microsoft.com**20060201170332] =

[Trim imports
simonpj@microsoft.com**20060201170248] =

[Yet another fix to an old hi-boot-6 file
simonpj@microsoft.com**20060201105544] =

[Kinding wibble in TH brackets
simonpj@microsoft.com**20060131175730] =

[Use extraGHCiLibraries (if supplied) in GHCi linker rather than extraLibra=
ries
Duncan Coutts <duncan.coutts@worc.ox.ac.uk>**20051207105654
 Also extend the parser.
] =

[combine libraries/.darcs-boring and .darcs-boring
Simon Marlow <simonmar@microsoft.com>**20060131161530] =

[Fix long-standing bug in CPR analysis
simonpj@microsoft.com**20060131153247
 =

 	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 updates
simonpj@microsoft.com**20060131130926] =

[Fix TcUnify.subFunTys in AppTy case
simonpj@microsoft.com**20060131122420
 =

 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 wibble
simonpj@microsoft.com**20060130163651] =

[Add mkHsCoerce to avoid junk in typechecked code
simonpj@microsoft.com**20060130131231
 =

 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 varies
simonpj@microsoft.com**20060130131133] =

[fix bug #664 in printSample()
Simon Marlow <simonmar@microsoft.com>**20060130115301
 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.
] =

[Fix hi-boot file for earlier versions of GHC
simonpj@microsoft.com**20060127175040] =

[Fix typo in boxy matching
simonpj@microsoft.com**20060127174536] =

[fix one case where -q wasn't honoured
Simon Marlow <simonmar@microsoft.com>**20060127104715] =

[Check for GMP.framework on all Darwin platforms, not just PPC
wolfgang.thaller@gmx.net**20060126071504] =

[Simon's big boxy-type commit
simonpj@microsoft.com**20060125162832
 =

 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 =3D rhs
 =

    A *function binding* is of the form
 	f pat1 .. patn =3D rhs
 =

    A binding of the formm
 	var =3D 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) =3D x
 =

    A *result type signature* is a signature on the result of a
    function definition:
 	f :: forall a. [a] -> a
 	head (x:xs) :: a =3D x
 =

    The form
 	x :: a =3D 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) =3D [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 =3D ...('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) =3D [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 =3D 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 =3D <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 =3D let op' :: forall b. ...
 	           op' =3D <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) =3D x	-- NO; pattern type is wobbly
 	=

 	g1 :: b -> b
 	g1 (x::b) =3D x	-- YES, because the pattern type is rigid
 =

 	g2 :: b -> b
 	g2 (x::c) =3D x	-- YES, same reason
 =

 	h :: forall b. b -> b
 	h (x::b) =3D x	-- YES, but the inner b is bound
 =

 	k :: forall b. b -> b
 	k (x::c) =3D 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) =3D (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) =3D (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) =3D (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) =3D (x::p)	--     in the patterns are bound by the foral=
l
 =

 =

 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  =3D Just x  :: Maybe p
 	g (y::q) False =3D 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) =3D 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 =3D x	-- NO
 =

 	g :: b -> b
 	g x :: b =3D x	-- YES; binds b in rhs
 =

 5) A *pattern type signature* in a *pattern binding* cannot bind a =

    scoped type variable
 =

 	(x::a, y) =3D ...		-- 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 =3D let ((y::b)::a, z) =3D ... =

 	      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) =3D Just id  --     not scope at all
 =

 	y :: forall a. a->a
 	Just y =3D 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 =3D (id,id)
 =

 	x1 :: forall a. a->a
 	y1 :: forall b. b->b
 	(x1,y1) =3D 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) =3D 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", with=
out
     naming the something.
 =

] =

[add double colon and double arrow symbols (-fglasgow-exts)
Simon Marlow <simonmar@microsoft.com>**20060125135501] =

[Fix conDeclFVs for GADTs, to fix bogus unused-import warning
simonpj@microsoft.com**20060125090957] =

[make the par# primop actually do something
Simon Marlow <simonmar@microsoft.com>**20060124162521] =

[Update Cachegrind support for changes to the Valgrind CLI
Simon Marlow <simonmar@microsoft.com>**20060124154732] =

[send usage info to stdout, not stderr
Simon Marlow <simonmar@microsoft.com>**20060124145551] =

[primop-docs
Dinko Tenev <dinko.tenev@gmail.com>**20060122222446] =

[remove old CVS stuff, replace with darcs
Simon Marlow <simonmar@microsoft.com>**20060120151322] =

[implement clean/dirty TSOs
Simon Marlow <simonmar@microsoft.com>**20060123164930
 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.
] =

[Better error message for Template Haskell pattern brackets
simonpj@microsoft.com**20060123142838] =

[remove old comment
Simon Marlow <simonmar@microsoft.com>**20060123140530] =

[Fix for feature request #655 (Loading the GHC library from GHCi.)
Lemmih <lemmih@gmail.com>**20060123110625
 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.
] =

[Make hsc2hs emit the full path name in {-# LINE #-} pagmas.
Duncan Coutts <duncan.coutts@worc.ox.ac.uk>**20060122011831
 For 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.
] =

[MFLAGS +=3D -f Makefile
Simon Marlow <simonmar@microsoft.com>**20060123094837
 merged from CVS, because Tailor isn't merging the libraries subdir
] =

[undo accidental commit of snapshot version
Simon Marlow <simonmar@microsoft.com>**20060122175817] =

[TAG final switch to darcs, this repo is now live
Simon Marlow <simonmar@microsoft.com>**20060120134630] =

Patch bundle hash:
b7e8acf56fda5cea43a8e6f972783849e82963ab

--=_--

.


