| So the 'where' binding in the following does not get generalized
| because it could not have been written at the top level, correct?

The other way round.  'where' bindings that could have been written at top 
level *are* generalised; ones that could not are *not* generalised.  See "Which 
bindings are affected?" in 
http://hackage.haskell.org/trac/ghc/blog/LetGeneralisationInGhc7, which tries 
to be precise. If it's hard to understand can I make it easier?

Simon

| 
| >>>>>
| cast :: (Typeable a, Typeable b) => a -> Maybe b
| cast x = r
|        where
|          r = if typeOf x == typeOf (fromJust r)
|                then Just $ unsafeCoerce x
|                else Nothing
| <<<<<
| 
| > Why the change. You'll remember that over the last year GHC has changed not
| to generalise local lets:
| http://hackage.haskell.org/trac/ghc/blog/LetGeneralisationInGhc7
| >
| > I relaxed the rule in 7.2, as discussed in "Which bindings are affected?"
| in that post. For reasons I have not investigated, 7.2 *still* doesn't
| generalise 'result'; but 7.4 correctly does.
| >
| > Simon

_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to