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
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to