ANNOUNCE: GHC 7.0.1 Release Candidate 1

Antoine Latter aslatter at gmail.com
Wed Sep 29 10:51:35 EDT 2010


On Wed, Sep 29, 2010 at 7:43 AM, Simon Peyton-Jones
<simonpj at microsoft.com> wrote:
> I've  been meaning to write a blog post about this, because it's a significant change.  I'll do this when I get home after ICFP.  Briefly though:
>
> * If you use -XGADTs or -XTypeFamilies (or -fglasgow-exts, which is deprecated) you get -XMonoLocalBinds, which says that local let/where bindings are not auto-generalised.  There's an extensive discussion of the reason for this decision in our paper "Let should not be generalised" and the journal version http://haskell.org/haskellwiki/Simonpj/Talk:OutsideIn
>
> * One of the main times this matters is in situations like
>        foo = runST (bar 5)
>          where bar x = return x
> Here 'bar' must have a polymorphic type, in order to be mentioned in runST's argument
>
> * The error message does point out that 'bar' is a possible culprit.  In David's example:
>    The following variables have types that mention s
>      fill0 :: MBUArr s e -> ST s Int
>
> * The solution is usually to add a type signature for the offending variable (fillO in this case); you can still have polymorphic bindings in let/where, but they need a type signature.
>
> Simon
>

Here's a boiled-down equivalent to what the issue is in uvector:

http://hpaste.org/40213/doesnt_work_in_ghc_7

In GHC 6.12, this would have type-checked. In GHC 7, I need to add a
type-signature to the 'helper' function, except I 'm not sure how to
do it.

So the function in uvector might need a larger refactoring.

Antoine


More information about the Glasgow-haskell-users mailing list