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
_______________________________________________
Glasgow-haskell-users mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to