为代数数据类型定义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#