2013-03-21 18 views
7

Supponiamo che io sono un tipo di dati algebrico con più costruttori, comeDefinizione istanze di sollevamento TH per i tipi di dati algebrici

data Animal a = Mouse a | Beaver a | Rabbit a 

Come potrei effettivamente creare un'istanza Lift? Il modo più semplice per farlo sarebbe

instance (Lift a) => Lift (Animal a) where 
     lift (Mouse x) = [| Mouse x |] 
     lift (Beaver x) = [| Beaver x |] 
     lift (Rabbit x) = [| Rabbit x |] 

Questo è molto ridondante. Naturalmente non posso astrarre direttamente i diversi animali come lift x = [| x |], anche se concettualmente è simile a quello che voglio ottenere. C'è un modo per farlo in TH in modo che non debba scrivere di nuovo la stessa riga per ogni costruttore di dati?

risposta

Problemi correlati