Voy a través de los libros wiki de Haskell GADTS guíaKind Firmas
https://en.wikibooks.org/wiki/Haskell/GADT.
Estaba siguiendo bastante bien hasta que se agregó una firma tipo que generaliza el tipo restringido del constructor Con.
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 Kind puedo utilizar el constructor contras de construir y el ajuste de patrones en contra de ambos MarkedLists seguros y no seguros. Aunque entiendo lo que estoy pasando, desafortunadamente tengo problemas para construir cualquier intuición sobre cómo la Firma Kind está permitiendo esto. ¿Por qué necesito la Firma Kind? ¿Qué está haciendo la Firma Kind?
Im todavía confundido ya que 'MarkedList ab ... donde' parece funcionar en GHC 7.4.1 también. No estoy seguro de lo que ofrece la firma tipo. – ExternalReality
Parece una forma alternativa de decirme lo mismo. –
Sí, pero Kind Signature necesita un idioma pragma, mientras que el segundo no. ¿Por qué, si ambas formas son iguales? ¿Qué extra proporciona la Firma Kind? – ExternalReality