wiki:PolymorphicComponents

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

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