erfordern Angenommen ich einen Typ wie dieses:Wie typeclass Instanz in Datendefinition
data Graph vertex = Graph {
vertices :: [vertex],
edgelist :: [(vertex, [vertex])]
}
Aber ich möchte eine typeclass Einschränkung für die Variable vom Typ Vertex haben, ich versuchte, es zu tun, wie es gemacht wird mit typeclass Definitionen:
data (Eq vertex) => Graph vertex = Graph {
vertices :: [vertex],
edgelist :: [(vertex, [vertex])]
}
Aber das erzeugt einen Syntaxfehler Illegal datatype context (use DatatypeContexts)
. Was ist der richtige Weg, um dies zu erreichen? Oder ist das nicht möglich?
"DatatypeContexts" war ein "Feature" in früheren Versionen von Haskell, das entfernt wurde, weil es nicht das tut, was Sie denken und im Wesentlichen immer ein Fehler ist. Es kann sehr nützlich sein, die Einschränkung wegzulassen, selbst wenn es scheint, dass sie immer benötigt wird. Beispielsweise können Sie Ihren Diagrammtyp zu einem Functor machen, aber nicht, wenn Sie diese Einschränkung hinzugefügt haben. –