【问题标题】:How to create a non-TH package from code generated using Template Haskell?如何从使用 Template Haskell 生成的代码创建非 TH 包?
【发布时间】:2013-05-13 08:41:16
【问题描述】:

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

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 本身的包?(如果可能,我更喜欢自动化的方式。)

【问题讨论】:

    标签: haskell tuples template-haskell


    【解决方案1】:

    有它的工具:

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

    【讨论】:

    • 我尝试了第零次,但它没有编译。我会尝试联系原作者。
    【解决方案2】:

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

    当然,这没有给你什么:

    • 语法检查。 (即,您生成的代码可能包含语法错误。)
    • 能够检查已编译的手写代码。
    • 能够使用其他 GHC 功能,例如类型推断。

    【讨论】:

    • 在TH和syb之前很久,我写了这么多程序编写程序,我写了一个程序编写程序编写程序。它从 .rtf 文件中读取源代码,并根据文本的颜色将代码放在每个不同的级别!我不确定我是否曾经将它从 Gofer 移植到 Haskell,但无论如何它很有趣。
    • 这是一个选项,是的,但我的问题是专门针对 TH 解决方案提出的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多