Dav*_*vid 7 haskell template-haskell
假设我有一个带有多个构造函数的代数数据类型,比如
data Animal a = Mouse a | Beaver a | Rabbit a
Run Code Online (Sandbox Code Playgroud)
我如何Lift有效地创建实例?最简单的方法是
instance (Lift a) => Lift (Animal a) where
lift (Mouse x) = [| Mouse x |]
lift (Beaver x) = [| Beaver x |]
lift (Rabbit x) = [| Rabbit x |]
Run Code Online (Sandbox Code Playgroud)
但这非常多余.当然,我不能直接抽象出不同的动物lift x = [| x |],尽管概念上它与我想要实现的相似.有没有办法在TH中执行此操作,以便我不必为每个数据构造函数再次编写相同的行?