270得票6回答
Template Haskell有什么不好的地方?

似乎Template Haskell经常被Haskell社区视为不幸的便利。很难用准确的语言来描述我在这方面观察到的情况,但请考虑以下几个例子: 在回答Which Haskell (GHC) extensions should users use/avoid?的问题时,将Template ...

259得票1回答
使用模板Haskell获取关联类型同义词

模板Haskell能否找出类型类中声明的关联类型同义词的名称和/或声明?我期望reify可以实现我想要的功能,但它似乎没有提供所有必要的信息。它可用于获取函数类型签名: % ghci GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? f...

72得票1回答
使用TemplateHaskell列出命名空间中的所有名称

我希望有一个 TemplateHaskell 函数 variablesInScope :: Q [Name],返回当前作用域中所有变量的Name列表。显然,TemplateHaskell 已经可以获取这个信息并实现一些函数,例如 reify :: Name -> Q Info 和 loo...

71得票2回答
如何正确地将编译时信息传递给Template Haskell函数?

我需要将编译脚本中的一些信息传递到Template Haskell中。目前,编译脚本将信息存储在系统环境中,因此我只需使用runIO包装的System.Environment.getEnvironment来读取它。是否有更好的方法,例如传递一些参数给ghc(类似于C预处理器的-D...),或者...

51得票1回答
在Template Haskell中是否可以为函数生成注释?

在我们的项目中,有许多由TH生成的函数。为了能够在Haddock/Hoogle中看到它们,向这些函数添加通用注释是有意义的。至少可以添加类似于“这是由TH生成的”的注释。这种做法是否可行?

45得票3回答
首选查看Template Haskell生成的代码的方法是什么?

如您所知,模板 Haskell 用于在编译时以编程方式生成各种AST Splices。 然而,Splice 经常是非常不透明的,往往很难辨别 Splice 实际生成了什么。如果您对 Splice 运行 Q Monad,并且 Splice 是良好类型化的,那么您会得到一个可显示的 AST 生成...

28得票4回答
在Haskell中无样板的AST注释?

我一直在尝试使用Haskell编写的Elm编译器。 我想开始实现一些优化,其中一部分涉及遍历AST并向某些节点添加“注释”,例如尾调用等。 我知道可以使用SYB或uniplate来进行遍历,但我想知道是否有一种无需样板代码的处理类型的方法。 因此,假设我们有一堆代数类型用于表示我们的AS...

27得票1回答
Template Haskell: 在GHCi中使用reify

在GHCi中,能否以某种方式执行reify操作? 当我尝试使用“runQ”时,它会报错“无法在IO模型下执行reify操作”。 >>> runQ (reify ''Bool) Template Haskell error: Can't do `reify' in the ...

20得票3回答
有没有适合不懂 Lisp 的人学习的 Template Haskell 教程?

我想学习Template Haskell,但我发现所有的教程都假定你已经学过Lisp,并且知道什么是Lisp宏或者你了解一些计算机科学术语 - 如splice、quasiquotations等等 - 或者一些关于宏的理论结果。 我不会编写一行Lisp代码(虽然有打算某一天学习它,但现在没有时...

20得票1回答
Template Haskell:是否有一个解析字符串并返回Q Exp的函数(或特殊语法)?

我正在尝试学习一些模板Haskell和准引用,我正在寻找一个函数,它接受一个String并将其解析为Q Exp,因此类型是: String -> Q Exp 尝试通过hoogle搜索,但我看到的结果涉及将字符串文字转换为Q Exp,而我找到的最接近的是Language.Haskel...