Przeglądając haddocks różnych opakowaniach często przyjść przykład dokumentacji, które wyglądają następująco (Control.Category):Co * (gwiazdka) lub inne rodzaje myśli w liście instancji plamiaka
Category k (Coercion k)
Category * (->)
lub tym (Control.Monad.Trans.Identity):
MonadTrans (IdentityT *)
Co dokładnie oznacza tutaj rodzaj podpisu? Nie pojawia się w źródle, ale już zauważyłem, że wydaje się, że występuje w modułach, które korzystają z rozszerzenia PolyKinds. Podejrzewam, że jest to prawdopodobnie jak TypeApplication, ale z pewnym rodzajem. Tak więc np. ostatni przykład oznacza, że IdentityT
jest transformatorem typu monad, jeśli jego pierwszy argument ma wartość *
.
Więc moje pytania to:
- Czy moja interpretacja poprawna i co dokładnie robi podpis rodzaj patrz?
- W pierwszej instancji
Category
skąd mam wiedzieć, żek
jest rodzajem, a nie typem? A może po prostu muszę znać arsenałCategory
? - Jaki jest kod źródłowy analogiczny do tej składni?
Nie proszę o wyjaśnienie rodzajów.
Zgoda, uważam to za błąd. Być może użycie "Category @k (Coercion k)" byłoby lepszym zapisem. – chi
Istnieją przypadki, w których należy określić rodzaj zmiennych typu, których nie ma w danym typie. Ta kombinacja sprawia, że naprawdę trudno jest znaleźć rozsądny sposób dokumentowania. – Carl