Quanto segue non può essere compilato:dichiarazioni di dati Template Haskell che derivano Visualizza
import Language.Haskell.TH
makeAlpha n = [d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
non riesco a capire che cosa l'errore significa affatto:
Can't derive instances where the instance context mentions
type variables that are not data type parameters
Offending constraint: Show t_d
When deriving the instance for (Show Alpha)
In the Template Haskell quotation
[d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
In the expression:
[d| data Alpha = Alpha $(conT n) deriving (Show, Read) |]
E 'possibile fare derivazioni come questo?
Penso che il problema potrebbe essere che sta cercando di derivare le istanze prima che ottenga * n *; per esempio sta cercando di espandere la tua giunzione per contenere le istanze, ma non può, perché non sa che cosa '$ (conT n)' assomiglia. Non sono sicuro, però. – ehird
Ho pensato allo stesso modo, ma spesso non posso essere sicuro di cosa sia permesso e non con Template Haskell ... In questo scenario penso sia ovvio che non possa ancora derivare le istanze e che debba attendere l'utilizzo della funzione per espandere . è un insetto? – Ana
Hmm, aspetta, non dovrebbe essere 'data Alpha = $ (conT n)' o qualcosa del genere? Penso che quello che hai ora è un errore di tipo, almeno dal dare un'occhiata alla [definizione di 'Dec'] (http://hackage.haskell.org/packages/archive/template-haskell/2.6.0.0/doc/html /Language-Haskell-TH-Syntax.html#t:Dec). – ehird