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?