问题标签 [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 - 如何轻松查看 Template Haskell 语句的输出?
我的模块中有以下模板 Haskell 代码,它是更大应用程序的一部分。
我怀疑生成的 Foldable 实例并不完全是我最初的想法,但我找不到验证这一点的方法。那么,最好只使用ghci
,是否可以查看生成的实例?
我尝试了以下并得到一个语法错误,我猜这是因为我做错了™。
web-applications - [$parseRoutes|/ Home GET|] 中使用了什么样的 Haskell 语法?
我在 Yesod 项目的首页找到了这段代码:
[$parseRoutes|/ Home GET|]
$、|、/ 和 % 符号使用并使用了哪些语言功能[$hamlet|%h1 Hello World|]
,这些符号有什么作用?
haskell - TemplateHaskell 和 IO
如果使用副作用,是否有任何适当的方法可以使 TH 的功能安全?说,我想要一个在编译时调用 git 并生成版本字符串的函数:
版本类型为 IO String。但是版本在运行时完全没有副作用,它只在编译时有副作用。有没有办法在不使用 unsafePerformIO 的情况下让它在运行时纯净?
haskell - 模板 Haskell 声明中的局部变量
我正在阅读pozorvlak 在 Template Haskell 上的婴儿步骤帖子,试图自己理解它,我遇到了这个部分:
回想一下,我们试图以编程方式生成表单的声明
data Fred = Fred
。让我们尝试使用准引用。由于调用 TH 代码的限制,我们必须将它放在它自己的模块中,所以让我们将以下内容放在 Keyword.hs 中,以便编译器可以找到它:现在编译:
这给我敲响了警钟,看起来与我最近读过的其他东西相似,模板 Haskell 包文档:
对于动态绑定的事物(
NameS
),我们可能希望它们以上下文相关的方式进行,所以我们再次不需要名称空间。例如:这里我们
Name
对类型构造函数和数据构造函数使用相同的
好吧,这几乎是一样的,让我们看看我是否可以让它工作:
试一试:
嗯...哦,也许我需要使用d
声明引用?
现在:
发生什么了?使用显式拼接不会改变任何一个错误。我是在断章取义地使用 Template Haskell 文档,还是只是错了?
haskell - 有没有给不了解 Lisp 的人的 Template Haskell 教程?
我想学习 Template Haskell,但我发现的所有教程要么假设你学习了 lisp 并且知道什么是 lisp 宏,要么你知道一些 cs 理论术语——比如拼接、准引用等……——或者一些关于宏的理论结果.
我无法编写一行 lisp 代码(而且,虽然我打算有一天会这样做,但我现在没有时间学习它)。Haskell 是我的第一个函数式语言,我学会了它,以至于我可以定期用它编写代码,使用 monads,应用程序,理解类型系统等......但我知道的不多(也想学习,但我'我太愚蠢了...... :P) 关于它背后的理论 cs 东西。所以我对我通常在 TH 教程中找到的行话一无所知。
所以,问题是:对于编写 Haskell 代码的人,不是作为专业的计算机科学家,而是作为将编程用于日常家务的人,将 Haskell 作为他的第一门函数式语言,是否有关于 TH 的教程?也许是对以 TH 为例的宏和元编程的介绍?
谢谢大家。:)
haskell - Haskell 模板:zipn
我正在阅读来自 archive.org 的Template Haskell 教程,因为它从 haskell.org 丢失,并注意到它已损坏,好像随机部分已被取出。
我希望了解他们的 zipn 实现。他们唯一的代码是:
这对我来说毫无意义。谁有好的教程副本?或者archive.org上的内容是什么?
haskell - 从模板 Haskell 拼接发出警告
我知道我可以通过fail
从拼接处调用来导致编译时错误,但是是否可以只生成警告?特别是我希望在使用-Werror
.
基本上我想要做的是:
这个想法是undefined
在编码时使用它而不是使用它,但要确保它不会通过使用-Werror
.
performance - 强制预计算一个常数
我在 Haskell 中有一个常量声明——我可以强制它提前进行评估吗?我看到一些看起来大致像这样的代码,
在我分析它时花点时间fst
(它确实有 1.68 亿次通话)。的二进制表示myList
非常小,例如,可以复制到全局内存中[如果这是一个 C 程序]。我-O3 -optc-O3
当然在编译。
非常感谢!
为自定义类型生成 Lift 实例
在 sclv 的回答中给调用的任何表达式都lift
必须是 Lift 的一个实例。有一个名为的库th-lift
,它将为自定义数据类型生成 Lift 实例。请参阅该软件包的文档。
haskell - Haskell——如何使用新的 4-argument quasi quoter
看起来准引号语法已更改为现在接受 4 个参数 [链接]。有人用过吗?谢谢。我只是想构建一些非常简单的东西,而网络上的示例现在不起作用。
提前致谢。
haskell - 让模板haskell用源信息(例如行号)包装函数的正确方法是什么
假设我从一个函数开始
然后,我想通过 Template Haskell 添加源信息以获得更好的错误消息。假设我可以为函数添加一个额外的参数
然后有一些fromJust
我可以在源代码中使用的宏,例如,
黑客
我确实设法通过使用准引号并解除源文件名的字符串来破解它。似乎Loc
没有 Lift 实例。有没有更好的办法?
谢谢!
(我知道fmap
通过Maybe
函子比使用更好fromJust
,但有时我需要破解。)