Ihr Professor verwendet wahrscheinlich eine ältere Version von GHC. Die von Ihnen gepostete Zeile verwendet eine Funktion, die vor Kurzem entfernt wurde. Die möglichen Lösungen sind:
Eq a =>
entfernen und data Shape a = Shape a
schreiben.
Wie GHC sagt, geben Sie das Flag -XDatatypeContexts
ein, um das entfernte Feature wieder zu aktivieren.
Genauer gesagt: die Eq a =>
Teil Ihrer Typdeklaration ist ein Datentyp Kontext genannt. Seine einzige Funktion ist es, den Typ des Shape
Konstruktors zu beschränken, so dass Sie anstelle von Shape :: a -> Shape a
Shape :: Eq a => a -> Shape a
erhalten. Es erspart Ihnen nicht, in Typensignaturen zu schreiben, die Shape
s enthalten, und tatsächlich werden Sie sogar aufgefordert, sie zu schreiben, wenn Sie es sonst nicht benötigen würden. Es war einmal nützlich, wenn strikte Felder in Datentypen eine Klassenbeschränkung erforderten, aber diese Funktion wurde vor langer Zeit entfernt.
Kurz gesagt, ist das Entfernen des Kontexts fast immer eine Verbesserung für Ihr Programm, daher wurden sie aus dem Haskell 2011-Sprachstandard entfernt. Seit GHC 7.0.1 gibt es eine Option zum Ausschalten und seit 7.2.1 war es die Standardeinstellung.
Mögliche Duplikate von [Wie zu beheben "Illegal Datentyp Kontext" (verwenden Sie -XDatatypeContexts)?] (Http://StackOverflow.com/Questions/22622399/How-to-fix-illegal-datatype-context-use-xdatatypecontexts) – wizzup