Operatory wyższych rzędów są w pełni akceptowane, jeśli tylko spełniają założenia kontroli rodzajów. Przykładowo:data App unt z = Z (unt z) ma rodzaj . To znaczy, że unt jest jednoargumentowym konstruktorem typu, którego parametr jest zwykłym typem ().

Warto nadmienić, że GHC oferuje rozszerzenie PolyKinds, które wraz z KindSignatures wprowadza rodzaje polimorficzne. Na przykład, następujący kod przechodzi kontrolę typów i rodzajów:data Tree (z :: k) = Leaf | Fork (Tree z) (Tree z) type FunnyTree = Tree [] -- OKOd wersji GHC 8.0.1 typy i rodzaje traktowane jak równoprawne koncepty.

Zobacz też System F

Przypisy

Kategoria:Typy danych