Problem with lexically scoped type variables.

Brian Hulley brianh at metamilk.com
Mon Oct 2 10:26:51 EDT 2006


Mirko Rahn wrote:
> In ghc-6.4.2 this works as expected, but ghc-6.5.20061001 says
>
> B.hs:40:44:
>     A pattern type signature cannot bind scoped type variables `s'
>       unless the pattern has a rigid type context

Why are the rules for lexically scoped type variables so complicated?
Could we not just have a very simple rule like the following:

    1) Any type variable not explicitly introduced by a forall is implicitly 
scoped over the entire top level decl that contains the expression/pattern 
that contains the type variable

By "entire top level decl" I mean the highest level decl that makes sense 
eg:

    foo :: MonadIO m => a -> m a
    foo x = let
                        bar :: forall b. b -> m b    -- 'm' bound by foo's 
sig
                        bar y = return y
                in
                        bar x

    zap :: a -> Int
    zap _ = let
                        yup = sizeOf (undefined :: a)
                in
                        yup

Regards, Brian.
-- 
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.

http://www.metamilk.com 



More information about the Glasgow-haskell-users mailing list