8

我正在制作一个小包,它为元组定义包装器并从它们中添加实例,比如

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 ...

这从 2 到15重复,所以它看起来像是 Template Haskell 的工作。

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

4

2 回答 2

4

有它的工具:

免责声明:我自己没有尝试过任何这些。

于 2013-05-18T08:51:12.123 回答
2

总是可以只编写一个将 Haskell 源代码输出为普通文本文件的 Haskell 程序。然后,您可以像任何其他文件一样编译它。

当然,这没有给你什么:

  • 语法检查。(即,您生成的代码可能包含语法错误。)
  • 检查已编译的手写代码的能力。
  • 使用其他 GHC 功能(如类型推断)的能力。
于 2013-05-18T10:14:05.260 回答