Есть случаи, когда необходимо указать тип переменных типа, которых нет в типе. Эта комбинация делает действительно трудным найти разумный способ документировать.
атривая пикши различных пакетов, я часто сталкиваюсь с документами экземпляров, которые выглядят так (Control.Category):
Category k (Coercion k)
Category * (->)
или это (Control.Monad.Trans.Identity):
MonadTrans (IdentityT *)
Что именно здесь означает добрый подпись? Он не отображается в источнике, но я уже заметил, что это происходит в модулях, которые используютPolyKinds расширение. Я подозреваю, что это, вероятно, как TypeApplication, но с видом. Так, например, последний пример означает, чтоIdentityT
является преобразователем монады, если его первый аргумент имеет вид*
.
Итак, мои вопросы:
Правильна ли моя интерпретация и на что именно ссылается та или иная подпись?Во-первыхCategory
Например, как я должен знать, чтоk
это вид, а не тип? Или я просто должен знать,Category
?Какой исходный код аналог этого синтаксиса?Я не прошу объяснения видов.