haskell - 如何使用 Template Haskell 获取函数体?

标签 haskell template-haskell

目前,我正在尝试从 Haskell 子集进行翻译,而无需处理所有解析、类型检查等问题。文档并没有帮助我找出一个函数来通过其名称获取函数的主体(所有定义)。

此调用的上下文应类似于

fac 0 = 1
fac x = z * fac (x - 1)

getBody = ...

main = do
    x <- runQ $ getBody [| fac |]
    print x

有谁知道
  • TH 上是否有一些好的和最新的文档(不是 Hackage 上的引用)或
  • 如何制作getBody?
  • 最佳答案

    通常,使用 TH 查找某事物定义的方法是使用 reify功能。然而:

  • can't use reify at run-time通过 runQ .它需要的信息在编译期间不可用。
  • 目前,使用 reify获取函数定义是not implemented due to lack of interest反正。

  • 看来您需要另寻路线。您是否考虑过使用 the haskell-src-exts package用于解析和/或 GHC API 或基于它的东西?

    关于haskell - 如何使用 Template Haskell 获取函数体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983391/

    相关文章:

    haskell - 搜索重写规则

    haskell - 在 Haskell 中展平任意深度的列表

    haskell - Hlint 与 (Win)GHCi 的集成

    haskell - 有没有一种简单的方法来引用具有约束参数的类型?

    haskell - haskell中的无限循环? (新手)

    haskell - 在 Haskell 中反转二进制数

    lisp反引号和拼接的Haskell模拟

    haskell - 如何使用 Template Haskell 检查多态类型的实例是否存在?

    haskell - 获取构造函数的名称

    performance - 强制预计算一个常数