Angenommen, ich habe ein algebraischen Datentypen mit mehreren Konstrukteuren, wiedefinieren TH Aufzug Instanzen für algebraische Datentypen
data Animal a = Mouse a | Beaver a | Rabbit a
Wie würde ich eine Lift
Instanz effektiv? Der einfachste Weg dazu wäre
instance (Lift a) => Lift (Animal a) where
lift (Mouse x) = [| Mouse x |]
lift (Beaver x) = [| Beaver x |]
lift (Rabbit x) = [| Rabbit x |]
Dies ist jedoch sehr redundant. Natürlich kann ich die verschiedenen Tiere nicht direkt abstrahieren wie lift x = [| x |]
, obwohl das konzeptionell ähnlich ist, was ich erreichen möchte. Gibt es eine Möglichkeit, dies in TH zu tun, so dass ich nicht für jeden Datenkonstruktor dieselbe Zeile erneut schreiben muss?