
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