Przechodzę przez książki wiki Haskell GADTSRodzaj Podpis
https://en.wikibooks.org/wiki/Haskell/GADT przewodnik.
Śledziłem całkiem dobrze, dopóki nie został dodany podpis Kind, który uogólnia ograniczony typ konstruktora Cons.
data Safe
data NotSafe
data MarkedList :: * -> * -> * where
Nil :: MarkedList t NotSafe
Cons :: a -> MarkedList a b -> MarkedList a c
safeHead :: MarkedList a Safe -> a
safeHead (Cons x _) = x
silly 0 = Nil
silly 1 = Cons() Nil
silly n = Cons() $ silly (n-1)
Za pomocą podpisu Kind można użyć konstruktora Cons do skonstruowania i dopasowania wzorca przeciwko zarówno bezpiecznym, jak i niebezpiecznym MarkedListom. Chociaż rozumiem, co się dzieje, niestety mam problem z budowaniem intuicji co do tego, jak pozwala na to podpis Kinda. Dlaczego potrzebuję podpisu Kind? Co robi Kind Signature?
Im nadal mylone, ponieważ 'MarkedList ab gdzie ...' wydaje się działać również w GHC 7.4.1. Nie jestem pewien, jaki rodzaj podpisu zapewnia. – ExternalReality
To wygląda na alternatywny sposób mówienia mi tego samego. –
Tak, ale Podpis rodzaju potrzebuje językowej pragmy, podczas gdy druga nie. Dlaczego, jeśli obie drogi są takie same? Jakie dodatkowe świadczenia oferuje Kind Signature? – ExternalReality