Version 4 (modified by ross@…, 8 years ago) (diff) |
---|

# Polymorphic Components

See ExtensionDescriptionHowto for information on how to write these extension descriptions. Please add any new extensions to the list of HaskellExtensions.

## Brief Explanation

Types of data constructor arguments are allowed local universal quantification (`forall`) and contexts constraining universally quantified type variables, e.g.

newtype Swizzle = MkSwizzle (forall a. Ord a => [a] -> [a])

The constructor then has a rank-2 type:

MkSwizzle :: (forall a. Ord a => [a] -> [a]) -> Swizzle

## References

- From Hindley-Milner Types to First-Class Structures by Mark P. Jones, Haskell Workshop, 1995.
- ExistentialsVsPolymorphicComponents?

## Pros

- type inference seems to be a simple extension of Hindley-Milner.
- large increment in expressiveness: types become impredicative, albeit with an intervening data constructor, enabling Church encodings and similar System F tricks.
- used by the ReadP type.

## Cons

- more complex denotational semantics