[Haskell-cafe] is Haskell missing a non-instantiating polymorphic case?
Adam Megacz
megacz at cs.berkeley.edu
Sun Oct 23 07:48:55 CEST 2011
The title might be a bit more provocative than necessary.
I'm starting to suspect that there are very useful aspects of the
parametricity of System F(C) which can't be taken advantage of by
Haskell in its current state. To put it briefly, case-matching on a
value of type (forall n . T n) forces one to instantiate the "n", even
though the branch taken within the case cannot depend on "n"
(parametricity).
I came up with the simplest example I could and posted it to
StackOverflow, but there haven't been any successes (despite some
excellent attempts!):
http://stackoverflow.com/questions/7720108/
This might sound like an obscure problem, but it actually starts to get
in the way of the very useful Washburn+Weirich "Boxes Go Bananas" and
related PHOAS representation. I've written up a short example of the
problems that happen here:
The link above also includes a very rough sketch of a proposal for a
"pcase" construct that doesn't instantiate its argument.
Is it possible to do what I'm attempting without adding "pcase" to the
language? Would "pcase" break the soundness of the type system (I
don't think so) or complicate type inference (probably)?
I'd be interested in any comments/thoughts/help people can offer.
Thanks!
- a
PS, I suspect that this is somehow related to the issue that Guillemette and
Monnier mention in section 5.1 of their paper on type-preserving closure
conversion, although I wasn't able to find the code online in order to be
sure.
More information about the Haskell-Cafe
mailing list