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