[Haskell-cafe] Rank2Types and pattern matching

Max Bolingbroke batterseapower at hotmail.com
Sun Jul 4 05:58:11 EDT 2010


On 4 July 2010 00:24, Yves Parès <limestrael at gmail.com> wrote:
> then it works, so obviously, the trouble is about pattern matching.
> What was I doing wrong?

This seems to be in violation of the Haskell Report. See e.g. section
3.3 (http://www.haskell.org/onlinereport/exps.html):

"""
The following identity holds:
\ p1 ... pn -> e	=	\ x1 ... xn -> case (x1, ..., xn) of (p1, ..., pn) -> e
where the xi are new identifiers.
"""

But:

runSomeMonad4, runSomeMonad5 :: (forall s. SomeMonad s a) -> a
runSomeMonad4 = \x -> case x of SomeMonad x -> runIdentity x
runSomeMonad5 = \(SomeMonad x) -> runIdentity x

runSomeMonad4 is accepted and runSomeMonad5 is rejected.

Of course, the Report doesn't make provision for rank-N types, so this
is not *strictly* speaking a violation. But it does seem against the
*spirit* of the report, if nothing else!

Cheers,
Max


More information about the Haskell-Cafe mailing list