impredicative polymorphism: seen on HCAR
Isaac Dupree
isaacdupree at charter.net
Mon Jun 2 10:37:54 EDT 2008
The May 2008 Haskell Communities and Activities Report, GHC
<http://www.haskell.org/communities/05-2008/html/report.html#ghc>:
> Impredicative polymorphism. We are not happy with GHC’s current
> implementation of impredicative polymorphism, which is rather
> complicated and ad hoc. Dimitrios (with Simon and Stephanie)
> wrote a paper about a new and better approach:
> http://research.microsoft.com/~simonpj/papers/boxy
> . At the same time, Daan Leijen has been working on his
> closely-related design:
> http://research.microsoft.com/users/daan/pubs.html
> . Daan’s design has a much simpler implementation, in exchange
> for an (arguably) less-predictable specification. Which of these
> two should we implement? Let us know!
I read the papers...
Dimitrios's *paper* is easier for me to understand than Daan's. In fact
they seem quite similar. I have no idea of any examples where they
would behave differently.
I don't use impredicative polymorphism much (but maybe because of my
perception that the existing implementations are poorly designed, and
that it can usually be avoided by an amount of abstraction that's useful
anyway). So I'd say, implement the easier solution. Is there a paper
or documentation somewhere, presenting a practical argument for why
impredicative polymorphism is important in real programs (beyond runST
$) -- for example, a real program that uses it and has clearer code
because of it?
I don't really mind writing let/function type-signatures that have weird
types (unless they're long and repeat information that doesn't need to
be, which is a different problem). I wonder how often these proposals
require type-signatures on lambdas passed to higher-order functions,
though...
A side-effect is for those of us who want to have any concern for future
compatibility with non-GHC type systems (or the long future of GHC's,
even), whether one of the proposals would be likely to be easier for
someone else to implement in a different compiler.
-Isaac
More information about the Glasgow-haskell-users
mailing list