问题标签 [template-haskell]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 如何获取 TemplateHaskell 命名变量的文字值
如果我有一个Name
in TemplateHaskell 并想找出它命名的变量的值,前提是该变量被声明为文字,可以这样做吗?
haskell - 模板 Haskell 中的无点样式
考虑以下模板 Haskell 函数:
是否可以从等式右侧消除 lambda 表达式并composeQ
使用无点样式编写?
haskell - 打印并执行字符串
我发现自己写了很多代码,比如
问题是,打印的消息可能与实际执行的代码不同步。显而易见的解决方案是自动生成此代码。
一种方法是将所有文本放在一个文件中,然后编写一个小程序来读取该文件并从中生成 Haskell 源代码。但另一种选择是使用 Template Haskell。
有人知道我将如何编写一个接受 aString
并从中生成上述代码的函数吗?我猜这应该很容易,但是没有很好的文档记录。
haskell - 为什么这个模板 Haskell 有效?
考虑这段代码:
现在,据我所知,这实际上是行不通的。在牛津括号内,s
不在范围内。然而,上述显然是完美的。
如果我们稍微改变一下这个例子,它现在会很糟糕:
就像以前一样,我们有一个不在范围内的变量。而这一次,它打破了。但它不会抱怨不在范围内的变量;相反,它抱怨一些缺少实例的无证类。
有谁知道这到底是怎么回事?
haskell - Langage.Haskell.TH.report 是如何工作的?
不幸的是,许多 Template Haskell 函数完全没有文档。一个这样的功能是report
。它需要 aBool
和 a String
,并产生一个编译错误,并将指定的字符串作为错误消息。有人知道这到底Bool
是为了什么吗?据我所知,任何一个值都做同样的事情......
haskell - 罗马人、红宝石和 Haskell
受到罗马人、红宝石和 D 的启发,我想看看是否可以在 Haskell 中完成相同的操作。
和:
首先,由于我是 Template Haskell 的新手,我想知道我是否做对了。实际计算发生在编译时,对吗?
其次,如何改进语法?
而不是$(roman "CCLXXXI")
我想要类似的东西roman "CCLXXXI"
,甚至更好的东西。到目前为止,我未能改进语法。
haskell - 如何规避 GHC 阶段限制?
我正在编写一个代码生成器,其输出取决于存储在其类实例中的数据类型字段描述。但是,我找不到如何使用 TH 生成的参数运行函数。
当另一个模块尝试使用生成器时
出现错误
编辑:
当我询问时,我认为问题的出现只是因为我没有掌握 TH 中的关键内容,可以通过将一些功能移至其他模块来解决。
如果无法从问题中生成预先计算的数据,我想了解更多关于 TH 的理论限制的信息。
haskell - 在 Haskell 编译期间如何在不同位置包含代码?
Quasi-quotes 允许在编译期间生成 AST 代码,但它会在 Quasi-quote 的编写位置插入生成的代码。是否可以以任何方式将编译时生成的代码插入其他地方?例如,在特定的模块文件中,与编写 QQ 的模块文件不同?这将取决于硬编码的模块结构,但这很好。
如果 QQ 无法做到这一点,但任何人都知道实现它的不同方式,我愿意提供建议。
haskell - 获取里面的函数名
我有一堆函数,比如:method1
, method2
, method3
. 对于所有这些都有HUnit
测试功能,例如:testMethod1
, testMethod2
, testMethod3
.
我想避免将函数名称作为错误消息的前缀进行冗余复制,并将其称为:
如何实现(赞赏任何“魔术”技巧)?
所以实际上的问题是如何在它的定义中使用函数名称?
更新。
从原始问题中实际上并不清楚,我也想处理这种情况:
最后我想写这样的东西:
haskell - 在模板haskell范围之外编译时间代码重写?
是否可以创建一个在编译时从模板haskell引号之外重写haskell代码的函数?
例如:
并在编译时将 g 转换为:
我希望我的“区分”函数被传递给“f”的 AST,并让我在编译之前重写它。据我所知,您不能在模板 haskell 中执行此操作,除非将函数的完整语法传递给它,即“g =区分罪”。
谢谢