Skip Navigation

Defeating Return Type Polymorphism

philipphagenlocher.de Defeating Return Type Polymorphism

This post is an exploration of a generic technique to effectively circumvent return type polymorphism in Haskell programs using GADTs and existential quantification.

This was already featured in the Weekly News a couple of weeks back, but I think maybe it deserves it's own thread. I've tried to explain this approach to some people before, but I think this article does a much better job than I have.

I do think the "Defeating" in the title might be a little bit negative, it's have preferred something neutral like "When your result type depends on your argument values", but it's still something useful to know from retaining your type safety.

This existentials and GADTs can be converted into a CPS style without type equality constraints (usually, with enough work) so that you can start from this description but use it in languages with less sophisticated type systems -- as long as they have parametricity -- like Haskell 2010.

12

You're viewing a single thread.

12 comments
  • This gives a nice practical motivation for GADTs and existential quantification.

    This existentials and GADTs can be converted into a CPS style without type equality constraints

    That sounds interesting. I can't easily imagine what that would look like. Do you have an example?

12 comments