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

_______________________________________________

Haskell-Cafe mailing list

[hidden email]
http://www.haskell.org/mailman/listinfo/haskell-cafe