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

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

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

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

最佳答案

有它的工具:

  • EvilSplicer (从来源 on 13 Oct 2018 中删除),作者 Joey Hess在他发现之前
  • zeroth ,它似乎不再处于积极开发中。

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

    关于haskell - 如何从使用 Template Haskell 生成的代码创建非 TH 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16621582/

    相关文章:

    haskell - Haskell:如何检测 “lazy memory leaks”

    haskell - 在编译时或运行时生成一个随机字符串,并在程序的其余部分使用它

    haskell - Yesod 中模板 haskell 的评估

    haskell - 当中间值从未具体键入时,Haskell 编译器如何为 `(==) (fromInteger 0) (fromInteger 0)` 发出代码?

    haskell - Haskell 中的 "Cannot create infinite type"错误

    haskell - 在 haskell 中使用 ord 函数不是作用域

    c++ - 如何遍历嵌套 vector ?

    scala - 从展平元组创建嵌套通用案例类

    python - 从大型元组/行列表中有效地构建 Pandas DataFrame

    haskell - 使用莎士比亚文本和外部文件