Есть случаи, когда необходимо указать тип переменных типа, которых нет в типе. Эта комбинация делает действительно трудным найти разумный способ документировать.

атривая пикши различных пакетов, я часто сталкиваюсь с документами экземпляров, которые выглядят так (Control.Category):

Category k (Coercion k)
Category * (->)

или это (Control.Monad.Trans.Identity):

MonadTrans (IdentityT *)

Что именно здесь означает добрый подпись? Он не отображается в источнике, но я уже заметил, что это происходит в модулях, которые используютPolyKinds расширение. Я подозреваю, что это, вероятно, как TypeApplication, но с видом. Так, например, последний пример означает, чтоIdentityT является преобразователем монады, если его первый аргумент имеет вид*.

Итак, мои вопросы:

Правильна ли моя интерпретация и на что именно ссылается та или иная подпись?Во-первыхCategory Например, как я должен знать, чтоk это вид, а не тип? Или я просто должен знать,Category?Какой исходный код аналог этого синтаксиса?

Я не прошу объяснения видов.

Ответы на вопрос(1)

Ваш ответ на вопрос