问题标签 [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.

0 投票
1 回答
188 浏览

haskell - 如何获取 TemplateHaskell 命名变量的文字值

如果我有一个Namein TemplateHaskell 并想找出它命名的变量的值,前提是该变量被声明为文字,可以这样做吗?

0 投票
1 回答
230 浏览

haskell - 模板 Haskell 中的无点样式

考虑以下模板 Haskell 函数:

是否可以从等式右侧消除 lambda 表达式并composeQ使用无点样式编写?

0 投票
5 回答
611 浏览

haskell - 打印并执行字符串

我发现自己写了很多代码,比如

问题是,打印的消息可能与实际执行的代码不同步。显而易见的解决方案是自动生成此代码。

一种方法是将所有文本放在一个文件中,然后编写一个小程序来读取该文件并从中生成 Haskell 源代码。但另一种选择是使用 Template Haskell。

有人知道我将如何编写一个接受 aString并从中生成上述代码的函数吗?我猜这应该很容易,但是没有很好的文档记录。

0 投票
2 回答
305 浏览

haskell - 为什么这个模板 Haskell 有效?

考虑这段代码:

现在,据我所知,这实际上是行不通的。在牛津括号内,s不在范围内。然而,上述显然是完美的。

如果我们稍微改变一下这个例子,它现在会很糟糕:

就像以前一样,我们有一个不在范围内的变量。而一次,它打破了。但它不会抱怨不在范围内的变量;相反,它抱怨一些缺少实例的无证类。

有谁知道这到底是怎么回事?

0 投票
2 回答
83 浏览

haskell - Langage.Haskell.TH.report 是如何工作的?

不幸的是,许多 Template Haskell 函数完全没有文档。一个这样的功能是report。它需要 aBool和 a String,并产生一个编译错误,并将指定的字符串作为错误消息。有人知道这到底Bool是为了什么吗?据我所知,任何一个值都做同样的事情......

0 投票
2 回答
179 浏览

haskell - 罗马人、红宝石和 Haskell

受到罗马人、红宝石和 D 的启发,我想看看是否可以在 Haskell 中完成相同的操作。

和:

首先,由于我是 Template Haskell 的新手,我想知道我是否做对了。实际计算发生在编译时,对吗?

其次,如何改进语法?

而不是$(roman "CCLXXXI")我想要类似的东西roman "CCLXXXI",甚至更好的东西。到目前为止,我未能改进语法。

0 投票
2 回答
1411 浏览

haskell - 如何规避 GHC 阶段限制?

我正在编写一个代码生成器,其输出取决于存储在其类实例中的数据类型字段描述。但是,我找不到如何使用 TH 生成的参数运行函数。

当另一个模块尝试使用生成器时

出现错误

编辑:

当我询问时,我认为问题的出现只是因为我没有掌握 TH 中的关键内容,可以通过将一些功能移至其他模块来解决。

如果无法从问题中生成预先计算的数据,我想了解更多关于 TH 的理论限制的信息。

0 投票
1 回答
182 浏览

haskell - 在 Haskell 编译期间如何在不同位置包含代码?

Quasi-quotes 允许在编译期间生成 AST 代码,但它会在 Quasi-quote 的编写位置插入生成的代码。是否可以以任何方式将编译时生成的代码插入其他地方?例如,在特定的模块文件中,与编写 QQ 的模块文件不同?这将取决于硬编码的模块结构,但这很好。

如果 QQ 无法做到这一点,但任何人都知道实现它的不同方式,我愿意提供建议。

0 投票
2 回答
1480 浏览

haskell - 获取里面的函数名

我有一堆函数,比如:method1, method2, method3. 对于所有这些都有HUnit测试功能,例如:testMethod1, testMethod2, testMethod3.

我想避免将函数名称作为错误消息的前缀进行冗余复制,并将其称为:

如何实现(赞赏任何“魔术”技巧)?

所以实际上的问题是如何在它的定义中使用函数名称?


更新

从原始问题中实际上并不清楚,我也想处理这种情况:

最后我想写这样的东西:

0 投票
2 回答
255 浏览

haskell - 在模板haskell范围之外编译时间代码重写?

是否可以创建一个在编译时从模板haskell引号之外重写haskell代码的函数?

例如:

并在编译时将 g 转换为:

我希望我的“区分”函数被传递给“f”的 AST,并让我在编译之前重写它。据我所知,您不能在模板 haskell 中执行此操作,除非将函数的完整语法传递给它,即“g =区分罪”。

谢谢