2015-05-04 9 views
14

Sto scrivendo una patch open source per utilizzare una libreria di font, ovvero i collegamenti haskell a una libreria di font in C (FTGL). Sto indicando il tipo di carattere in una delle strutture di dati, che è definito come segue:Istanza dati Haskell per tipo di dati opaco

type Font = Ptr Font_Opaque 
data Font_Opaque 

Purtroppo, per adattarsi alla struttura dei dati della biblioteca che sto patch, questo tipo ha bisogno di essere un'istanza di Data. Ptr lo è già, ma Font_Opaque ovviamente non lo è, quindi il compilatore si lamenta.

Poiché è un tipo opaco non so come procedere ... come implementare Data Font_Opaque in modo più o meno ragionevole? C'è un modo sensato?

+2

Si potrebbe provare 'derivare istanza Data Font_Opaque' (abilitare prima l'estensione' StandaloneDeriving') e quindi (se GHC può derivare) esaminare l'istanza con '-ddump-deriv'. –

risposta

3

Come il commento di András Kovács suggerisce, utilizzando l'estensione lingua StandaloneDeriving

{-# LANGUAGE StandaloneDeriving -#} 

e poi:

deriving instance Data Font_Opaque 

ha fatto il trucco, almeno quando il compilatore è interessato. Riporterò se ciò influisce in qualche modo sul programma. Grazie!