似乎Template Haskell经常被Haskell社区视为不幸的便利。很难用准确的语言来描述我在这方面观察到的情况,但请考虑以下几个例子: 在回答Which Haskell (GHC) extensions should users use/avoid?的问题时,将Template ...
模板Haskell能否找出类型类中声明的关联类型同义词的名称和/或声明?我期望reify可以实现我想要的功能,但它似乎没有提供所有必要的信息。它可用于获取函数类型签名: % ghci GHCi, version 7.8.3: http://www.haskell.org/ghc/ :? f...
我希望有一个 TemplateHaskell 函数 variablesInScope :: Q [Name],返回当前作用域中所有变量的Name列表。显然,TemplateHaskell 已经可以获取这个信息并实现一些函数,例如 reify :: Name -> Q Info 和 loo...
我需要将编译脚本中的一些信息传递到Template Haskell中。目前,编译脚本将信息存储在系统环境中,因此我只需使用runIO包装的System.Environment.getEnvironment来读取它。是否有更好的方法,例如传递一些参数给ghc(类似于C预处理器的-D...),或者...
在我们的项目中,有许多由TH生成的函数。为了能够在Haddock/Hoogle中看到它们,向这些函数添加通用注释是有意义的。至少可以添加类似于“这是由TH生成的”的注释。这种做法是否可行?
如您所知,模板 Haskell 用于在编译时以编程方式生成各种AST Splices。 然而,Splice 经常是非常不透明的,往往很难辨别 Splice 实际生成了什么。如果您对 Splice 运行 Q Monad,并且 Splice 是良好类型化的,那么您会得到一个可显示的 AST 生成...
我一直在尝试使用Haskell编写的Elm编译器。 我想开始实现一些优化,其中一部分涉及遍历AST并向某些节点添加“注释”,例如尾调用等。 我知道可以使用SYB或uniplate来进行遍历,但我想知道是否有一种无需样板代码的处理类型的方法。 因此,假设我们有一堆代数类型用于表示我们的AS...
在GHCi中,能否以某种方式执行reify操作? 当我尝试使用“runQ”时,它会报错“无法在IO模型下执行reify操作”。 >>> runQ (reify ''Bool) Template Haskell error: Can't do `reify' in the ...
我想学习Template Haskell,但我发现所有的教程都假定你已经学过Lisp,并且知道什么是Lisp宏或者你了解一些计算机科学术语 - 如splice、quasiquotations等等 - 或者一些关于宏的理论结果。 我不会编写一行Lisp代码(虽然有打算某一天学习它,但现在没有时...
我正在尝试学习一些模板Haskell和准引用,我正在寻找一个函数,它接受一个String并将其解析为Q Exp,因此类型是: String -> Q Exp 尝试通过hoogle搜索,但我看到的结果涉及将字符串文字转换为Q Exp,而我找到的最接近的是Language.Haskel...