【问题标题】:Template Haskell names of declarations as strings以字符串形式声明的模板 Haskell 名称
【发布时间】:2013-04-26 06:37:20
【问题描述】:

说我有这个:

f x = x + 1

tt2 name o = sequence [valD (varP (mkName name)) (normalB [| f $(varE o) |]) []]

我想将tt2 转换为tt

tt name o = [d| ??? = f $(varE o) |]

我不知道??? 应该是什么。这可能是因为我还不明白 TH 是如何工作的。有人可以帮忙吗?

【问题讨论】:

    标签: haskell template-haskell


    【解决方案1】:

    您正在尝试拼接名称或模式。不幸的是,这是不可能的。模板 Haskell 只允许拼接表达式、类型和声明,因此您只能像在原始代码中那样手动进行。

    请参阅GHC #1476,了解为什么不允许模式拼接的一些原因。

    【讨论】:

    • 好的。你认为有没有更简洁的方式来写我写的东西?
    • @me2:不是这样。如果您需要在多个地方执行此操作,您可以定义像 simpleDecl name body = sequence [valD (varP (mkName name)) (normalB body) []] 这样的帮助器,仅此而已。
    猜你喜欢
    • 2013-08-20
    • 2011-09-30
    • 2020-12-16
    • 1970-01-01
    • 2015-05-27
    • 2014-05-23
    • 2022-01-12
    相关资源
    最近更新 更多