Насколько я знаю, в любом исходном файле Haskell нет определения Constraint
. Это встроенное, подключенное к сети имя, которое, согласно определению, принадлежит GHC.Prim
в самих источниках GHC. Так, в частности, Constraint
не является продвинутым типом данных, нет соответствующего типа данных вида *
, который называется Constraint
.
Есть другие виды в GHC, которые обрабатываются аналогично, например AnyK
, OpenKind
или даже BOX
.
GHC не имеет большого значения внутри между типами данных и типами и чем-либо выше. Вот почему они, например, все отображаются как определяемые с использованием data
, хотя и с различными целевыми видами.
Обратите внимание, что, насколько GHC, то мы также имеем
data BOX :: BOX
Это невозможно для пользователя непосредственно определить новые «виды» супер-вид BOX
, хотя.
Насколько я знаю, импорт/экспорт также не имеет никакого отношения между типами и типами пространств имен. Так, например,
import GHC.Exts (OpenKind, BOX, Constraint)
является законным. В самом деле, если вы потом сказать
x :: Constraint
x = undefined
вы не получите ошибку области действия, но и своего рода ошибку, говоря о том, что тип любезного *
ожидается, но вид рода BOX
предусмотрен тип /.
Я также должен сказать, что вся история о видах несколько в движении, и есть обсуждаемые предложения, которые немного меняют это: см., Например, https://ghc.haskell.org/trac/ghc/wiki/NoSubKinds для обсуждения.
'GHC.Prim' является чисто фиктивным в любом случае. Основываясь на комментариях в 'GHC.Base', кажется, что его интерфейс был однажды определен в' GHC.Prim.hi-boot', но этот файл больше не существует. – dfeuer
Я нашел [более старую версию] (https://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/src/GHC-Prim.html). Но, как вы сказали, это уже не так в нынешней главе. – gspindles
Эта «старая версия», которую вы нашли, на самом деле недавно, и так же, как подделка. Как показывают комментарии, он используется только Haddock и никогда не компилируется. – dfeuer