Ich kann es nicht wirklich bekommen. Warum brauchen wir es überhaupt? Ich meine, wenn ich den gleichen Typparameter verwende, denke ich, dass sie vom selben Typ sein sollten.Funktionale Abhängigkeit in Haskell
Ich habe gehört, dass es dem Compiler helfen kann, die Endlosschleife zu vermeiden. Kann mir jemand mehr dazu erzählen?
Am Ende, gibt es irgendwelche "Muster und Praktiken" sollten wir auf die Nutzung der funktionalen Abhängigkeit in Real World Haskell folgen?
[Follow-up-Frage]
class Extract container element where
extract :: container -> element
instance Extract (a,b) a where
extract (x,_) = x
In dem obigen Code, habe ich die gleiche Art Variable 'a' sowohl für Container- und Element, ich glaube, der Compiler kann also daraus schließen, dass diese beiden Typen sind vom selben Typ.
Aber wenn ich diesen Code in GHCi versuchte, bekam ich folgendes Feedback:
*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)
Als einer von ihnen angegeben wurde Typ ‚Char‘ zu sein, warum die andere nach wie vor ungelöst Typ ‚Element '?
hilft http://www.haskell.org/haskellwiki/Funktionale_abhängigkeiten? – lijie