问题标签 [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 投票
2 回答
872 浏览

haskell - 如何轻松查看 Template Haskell 语句的输出?

我的模块中有以下模板 Haskell 代码,它是更大应用程序的一部分。

我怀疑生成的 Foldable 实例并不完全是我最初的想法,但我找不到验证这一点的方法。那么,最好只使用ghci,是否可以查看生成的实例?

我尝试了以下并得到一个语法错误,我猜这是因为我做错了™。

0 投票
1 回答
305 浏览

web-applications - [$parseRoutes|/ Home GET|] 中使用了什么样的 Haskell 语法?

我在 Yesod 项目的首页找到了这段代码:

[$parseRoutes|/ Home GET|]$、|、/ 和 % 符号使用并使用了哪些语言功能[$hamlet|%h1 Hello World|],这些符号有什么作用?

0 投票
1 回答
1146 浏览

haskell - TemplateHaskell 和 IO

如果使用副作用,是否有任何适当的方法可以使 TH 的功能安全?说,我想要一个在编译时调用 git 并生成版本字符串的函数:

版本类型为 IO String。但是版本在运行时完全没有副作用,它只在编译时有副作用。有没有办法在不使用 unsafePerformIO 的情况下让它在运行时纯净?

0 投票
1 回答
1106 浏览

haskell - 模板 Haskell 声明中的局部变量

我正在阅读pozorvlak 在 Template Haskell 上的婴儿步骤帖子,试图自己理解它,我遇到了这个部分:

回想一下,我们试图以编程方式生成表单的声明data Fred = Fred。让我们尝试使用准引用。由于调用 TH 代码的限制,我们必须将它放在它自己的模块中,所以让我们将以下内容放在 Keyword.hs 中,以便编译器可以找到它:

现在编译:

这给我敲响了警钟,看起来与我最近读过的其他东西相似,模板 Haskell 包文档

对于动态绑定的事物(NameS),我们可能希望它们以上下文相关的方式进行,所以我们再次不需要名称空间。例如:

这里我们Name对类型构造函数和数据构造函数使用相同的

好吧,这几乎是一样的,让我们看看我是否可以让它工作:

试一试:

嗯...哦,也许我需要使用d声明引用?

现在:

发生什么了?使用显式拼接不会改变任何一个错误。我是在断章取义地使用 Template Haskell 文档,还是只是错了?

0 投票
3 回答
2137 浏览

haskell - 有没有给不了解 Lisp 的人的 Template Haskell 教程?

我想学习 Template Haskell,但我发现的所有教程要么假设你学习了 lisp 并且知道什么是 lisp 宏,要么你知道一些 cs 理论术语——比如拼接、准引用等……——或者一些关于宏的理论结果.

我无法编写一行 lisp 代码(而且,虽然我打算有一天会这样做,但我现在没有时间学习它)。Haskell 是我的第一个函数式语言,我学会了它,以至于我可以定期用它编写代码,使用 monads,应用程序,理解类型系统等......但我知道的不多(也想学习,但我'我太愚蠢了...... :P) 关于它背后的理论 cs 东西。所以我对我通常在 TH 教程中找到的行话一无所知。

所以,问题是:对于编写 Haskell 代码的人,不是作为专业的计算机科学家,而是作为将编程用于日常家务的人,将 Haskell 作为他的第一门函数式语言,是否有关于 TH 的教程?也许是对以 TH 为例的宏和元编程的介绍?

谢谢大家。:)

0 投票
2 回答
343 浏览

haskell - Haskell 模板:zipn

我正在阅读来自 archive.org 的Template Haskell 教程,因为它从 haskell.org 丢失,并注意到它已损坏,好像随机部分已被取出。

我希望了解他们的 zipn 实现。他们唯一的代码是:

这对我来说毫无意义。谁有好的教程副本?或者archive.org上的内容是什么?

0 投票
3 回答
379 浏览

haskell - 从模板 Haskell 拼接发出警告

我知道我可以通过fail从拼接处调用来导致编译时错误,但是是否可以只生成警告?特别是我希望在使用-Werror.

基本上我想要做的是:

这个想法是undefined在编码时使用它而不是使用它,但要确保它不会通过使用-Werror.

0 投票
1 回答
901 浏览

performance - 强制预计算一个常数

我在 Haskell 中有一个常量声明——我可以强制它提前进行评估吗?我看到一些看起来大致像这样的代码,

在我分析它时花点时间fst(它确实有 1.68 亿次通话)。的二进制表示myList非常小,例如,可以复制到全局内存中[如果这是一个 C 程序]。我-O3 -optc-O3当然在编译。

非常感谢!

为自定义类型生成 Lift 实例

在 sclv 的回答中给调用的任何表达式都lift必须是 Lift 的一个实例。有一个名为的库th-lift,它将为自定义数据类型生成 Lift 实例。请参阅该软件包的文档

0 投票
2 回答
309 浏览

haskell - Haskell——如何使用新的 4-argument quasi quoter

看起来准引号语法已更改为现在接受 4 个参数 [链接]。有人用过吗?谢谢。我只是想构建一些非常简单的东西,而网络上的示例现在不起作用。

提前致谢。

0 投票
2 回答
567 浏览

haskell - 让模板haskell用源信息(例如行号)包装函数的正确方法是什么

假设我从一个函数开始

然后,我想通过 Template Haskell 添加源信息以获得更好的错误消息。假设我可以为函数添加一个额外的参数

然后有一些fromJust我可以在源代码中使用的宏,例如,

黑客

我确实设法通过使用准引号并解除源文件名的字符串来破解它。似乎Loc没有 Lift 实例。有没有更好的办法?

谢谢!

(我知道fmap通过Maybe函子比使用更好fromJust,但有时我需要破解。)