Меня смущает разница между конструкторами типов, константами типов и переменными типа.
В отчете Haskell 98 говорится, что существует 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
?