# Rank-N types

### From HaskellWiki

## 1 About

Normal Haskell '98 types are considered Rank-1 types. A Haskell '98 type signature such as

a -> b -> a

implies that the type variables are universally quantified like so:

forall a b. a -> b -> a

forall

(->)

forall a. a -> (forall b. b -> a)

is also a Rank-1 type because it is equivalent to the previous signature.

However, aforall

(->)

forall

(forall a. a -> a) -> (forall b. b -> b)

forall

Rank-N type reconstruction is undecidable in general, and some explicit type annotations are required in their presence.

Rank-2 or Rank-N types may be specifically enabled by the language extensions

{-# LANGUAGE Rank2Types #-}

{-# LANGUAGE RankNTypes #-}

## 2 Also see

Rank-N types on the Haskell' website.