次のような複数のコンストラクターを持つ代数データ型があるとします。
data Animal a = Mouse a | Beaver a | Rabbit a
Lift
インスタンスを効果的に作成するにはどうすればよいですか? これを行う最も簡単な方法は次のとおりです。
instance (Lift a) => Lift (Animal a) where
lift (Mouse x) = [| Mouse x |]
lift (Beaver x) = [| Beaver x |]
lift (Rabbit x) = [| Rabbit x |]
ただし、これは非常に冗長です。もちろん、さまざまな動物を のように直接抽象化することはできませんがlift x = [| x |]
、概念的には達成したいことと似ています。データ コンストラクターごとに同じ行を再度書き込む必要がないように、TH でこれを行う方法はありますか?