如何使用Template Haskell生成的代码创建非TH包?

Pet*_*lák 8 haskell tuples template-haskell

我正在制作一个小包,为元组定义包装器,并添加实例形式,如

newtype Tuple2 a = Tuple2 { untuple2 :: (a, a) }
  deriving (...)

tuple2 :: a -> a -> Tuple2 a
tuple2 = ...

instance Traversable Tuple2 where ...
instance Foldable Tuple2 where ...
instance Functor Tuple2 where ...
instance Applicative Tuple2 where ...
Run Code Online (Sandbox Code Playgroud)

这从2到15重复,所以它看起来像模板Haskell的工作.

生成的代码总是与Haskell 98兼容,所以我希望最终的结果也是Haskell 98兼容的软件包.是否可以使用Template Haskell生成一段代码并从中创建一个不使用TH本身的包?(如果可能的话,我更喜欢自动化方式.)

Joa*_*ner 4

有一些工具可以实现:

免责声明:我自己还没有尝试过其中任何一个。