Che diavolo sta succedendo qui:non poteva competere tipo `* 'contro' #'
"Couldn't match kind `*' against `#'"
stavo provando quanto segue in GHCi utilizzando TemplateHaskell (ghci -XTemplateHaskell
)
$(reify ''Show >>= dataToExpQ (const Nothing))
I speravo di ottenere un Exp
fuori da questo (che ha un'istanza di Show). Lo sto facendo per inserire informazioni sui tipi haskell in un'applicazione in modo tale che siano disponibili come dati reali, non come stringa.
Il mio obiettivo è la seguente:
info :: Info
info = $(reify ''Show >>= dataToExpQ (const Nothing))
Io davvero non capisco che messaggio di errore, ciò che è '#' comunque? Se c'è #
, c'è anche # -> #
o * -> #
? È qualcosa che si riferisce a generi come i tipi relativi ai tipi (anche se non saprei cosa potrebbe essere)?
Va bene, così io capire ora che GHC ha una gerarchia di genere e che `#' è un tipo speciale di tipi senza custodia. Tutto bene, ma perché compare questo errore? Forse i tipi non condivisi non giocano bene con il genercis?
Non sono completamente sicuro che questo abbia ancora senso per me, dal momento che considererei i tipi non condivisi come una ottimizzazione eseguita dal compilatore. Ho anche pensato che se esiste un'istanza di Data, deve essere presente per tutti i tipi che potrebbero essere inclusi nella struttura dei dati.
In seguito a ulteriori indagini, credo che Names ponga il problema, c'è un modo per aggirarli in dataToExpQ? Come usare quell'argomento comunque?
'#' è il tipo di tipi unboxed, vedere http://stackoverflow.com/a/3034295/700253 – Vitus
grazie per il suggerimento. quindi: come risolvere il problema :-)? – scravy