2013-03-21 13 views
7

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?

Antwort

Verwandte Themen