No puedo entenderlo. ¿Por qué lo necesitamos en absoluto? Quiero decir, si uso el mismo parámetro de tipo, creo que eso significa que deberían ser del mismo tipo.Dependencia funcional en Haskell
Escuché que puede ayudar al compilador a evitar el ciclo infinito. ¿Puede alguien decirme más detalles sobre eso?
Al final, ¿hay algún 'patrón y prácticas' que debamos seguir en el uso de la dependencia funcional en Real World Haskell?
[pregunta de seguimiento]
class Extract container element where
extract :: container -> element
instance Extract (a,b) a where
extract (x,_) = x
En el código anterior, que utiliza la misma variable de tipo 'A' para los dos contenedores y el elemento, creo que el compilador puede pues deducir que estos dos tipos son del mismo tipo
Pero cuando traté este código en GHCi, me dio la siguiente respuesta:
*Main> extract('x',3)
<interactive>:1:0:
No instance for (Extract (Char, t) element)
arising from a use of `extract' at <interactive>:1:0-13
Possible fix:
add an instance declaration for (Extract (Char, t) element)
In the expression: extract ('x', 3)
In the definition of `it': it = extract ('x', 3)
Cuando uno de ellos se ha especificado a ser de tipo 'char', ¿por qué el otro es todavía elemento de tipo no resuelta ' ¿?
hace http://www.haskell.org/haskellwiki/Functional_dependencies help? – lijie