Probabilmente il tuo professore sta usando una versione precedente di GHC. La linea che hai pubblicato utilizza una funzione che è stata rimossa da poco tempo. Le soluzioni possibili sono:
Rimuovere Eq a =>
e scrittura data Shape a = Shape a
.
Come dice GHC, dare il flag -XDatatypeContexts
per riattivare la funzione rimossa.
Più in dettaglio: la Eq a =>
parte della vostra dichiarazione del tipo è chiamato un contesto tipo di dati. La sua unica funzione è limitare il tipo di costruttore Shape
, in modo che invece di Shape :: a -> Shape a
si ottenga Shape :: Eq a => a -> Shape a
. Non ti evita di dover scrivere Eq a
in firme di tipo che includono Shape
s, e in effetti ti richiederà persino di scriverle quando non dovresti altrimenti. Una volta era utile quando i campi severi nei tipi di dati richiedevano un vincolo di classe, ma quella funzione era stata rimossa molto tempo fa.
In breve, la rimozione del contesto è quasi sempre un miglioramento del programma, pertanto sono stati rimossi dallo standard di lingua Haskell 2011. Dal momento che GHC 7.0.1 è stata un'opzione per disattivarli e dal 7.2.1 è stata l'impostazione predefinita.
fonte
2013-09-21 16:34:13
Possibile duplicato di [Come risolvere "contesto di tipi di dati illegali" (utilizzare -XDatatypeContexts)?] (Http://stackoverflow.com/questions/22622399/how-to-fix-illegal-datatype-context-use-xdatatypecontexts) – wizzup