7

次のような複数のコンストラクターを持つ代数データ型があるとします。

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 でこれを行う方法はありますか?

4

1 に答える 1

4

これはまさにこの機能を提供する th-lift パッケージの目的です: http://hackage.haskell.org/package/th-lift

于 2013-03-21T17:04:48.140 に答える