Sto passando attraverso i libri wiki Haskell GADTSTipo firme
https://en.wikibooks.org/wiki/Haskell/GADT guida.
Stavo seguendo abbastanza bene fino a quando non è stata aggiunta una firma tipo che generalizza il tipo vincolato del costruttore 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)
con la firma Gentile posso utilizzare il costruttore Contro di costruire e pattern match contro entrambi MarkedLists sicuri e non sicuri. Mentre capisco cosa sta succedendo, sfortunatamente sto avendo problemi a costruire intuizioni su come il Kind Signature lo consenta. Perché ho bisogno del Kind Signature? Che cosa sta facendo la firma del genere?
Im ancora confuso dal 'MarkedList ab dove ...' sembra funzionare anche in GHC 7.4.1. Non sono sicuro di ciò che fornisce la firma gentile. – ExternalReality
Sembra un modo alternativo di dire la stessa cosa a me. –
Sì, ma il tipo di firma ha bisogno di un pragma del linguaggio mentre il secondo no. Perché, se entrambi i modi sono uguali? Che extra fornisce il Kind Signature? – ExternalReality