[Haskell-cafe] Rank 2 polymorphism in pattern matching?

C Rodrigues red5_2 at hotmail.com
Sat Apr 8 14:31:03 EDT 2006

This counterintuitive typechecking result came up when I wrote a wrapper 
around runST.  Is there some limitation of HM with respect to type checking 
pattern matching?

data X a b = X (a -> a)
run :: forall a. (forall b. X a b) -> a -> a
-- This definition doesn't pass the typechecker
run (X f) = f
-- But this definition works
run x = (\(X f) -> f) x

More information about the Haskell-Cafe mailing list