为代数数据类型定义TH Lift实例

假设我有一个具有多个构造函数的代数数据类型,比如

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 |] lift x = [| x |] ,尽管在概念上与我想要实现的类似。 有没有办法在TH中这样做,以便我不必为每个数据构造函数再次编写相同的行?


这是th-lift包的目的,它提供了这个功能:http://hackage.haskell.org/package/th-lift

链接地址: http://www.djcxy.com/p/70187.html

上一篇: Defining TH Lift instances for algebraic data types

下一篇: Expressing type relationships and avoiding long type parameter lists in C#