Конструкторы типов и константы типов (и переменные типа): В чем разница?

Меня смущает разница между конструкторами типов, константами типов и переменными типа.

В отчете Haskell 98 говорится, что существует 4 типа выражений типа:

  1. Переменные типа
  2. Конструкторы типов
  3. Приложение типа
  4. Тип в скобках

Итак, что такое константа типа? В отчете говорится «Char, Int ... являются константами типа» , но я не могу найти более подробный пример. Еще больше сбивает с толку то, как IO сначала называется «конструктором унарного типа» , но затем упоминается как «константа, IO» .

Причина, по которой я спрашиваю, связана с этой статьей о реализации системы типов Haskell . В нем говорится следующее:

Выражения типа Haskell - это либо переменные типа, либо константы (каждая из которых имеет связанный вид), либо приложения одного типа к другому: применение типа вида k1 -> k2 к типу kind k1 производит тип kind k2

Он говорит нечто иное, чем отчет. Является ли второй тип выражений типа «конструкторами» или «константами»?

В документ также включен код, показывающий представление:

data Type  = TVar Tyvar | TCon Tycon | TAp  Type Type | TGen Int
             deriving Eq

data Tyvar = Tyvar Id Kind
           deriving Eq
data Tycon = Tycon Id Kind
           deriving Eq

Очевидно Tycon означает «конструктор типа», но затем что представляет TCon ? А как насчет Tyvar и TVar ? Почему необходимо разделять T и Ty ?

5
задан Pubby 4 February 2012 в 08:34
поделиться