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

haskell - 是否可以为应用函子使用括号语法糖?

McBride 和 Paterson 的“带效果的应用程序编程”中,他们引入了一些可爱的语法糖来提升纯函数:

为了

我记得有人在其他地方使用li f w x y z ilor il f v w x y z li,我认为/希望这可能是因为它可以使用一些现有的语言特性和 and 的巧妙定义来li定义il

除了论文之外,我找不到任何对此的参考,并且假设[|并且|]不太可能很快出现在 ghc 中,是否有可能以li某种方式实施il?我想不出适合他们的类型,所以我假设我需要 Template Haskell 或类似的东西,但我知道的还不够多。[af| f x y ]会很好,但在我开始尝试之前我不知道这是否可能,如果是的话,当然需要帮助。

0 投票
1 回答
417 浏览

haskell - 在 Haskell 中处理来自外部文件的标准准引用

我想读取一个外部 Haskell 源文件以进行编译时 AST 操作。我怎样才能做到这一点?我尝试了类似以下的方法,但编译时出现错误消息“TH.hs:15:12:声明括号内不允许声明拼接”。

我也尝试过 haskell-src-exts 包,但是这个包似乎只解析并且不解析标识符和类型检查。所以我认为TH是一个更好的选择。

0 投票
1 回答
234 浏览

haskell - 模板 Haskell 编译错误

考虑以下代码:

这可以正常编译并按预期打印出“Hello1”。

但是,添加以下行 (GHC 7.4.1) 会产生编译错误:

给出的错误是:

为什么添加该f2行会导致编译错误?

注意:模板 Haskell 部分在这里可能看起来很傻,但它们是更复杂的模板 Haskell 的简化,它确实适用于元组。我已经发布了我可以构建的最简单的示例,但仍然显示错误。我意识到在这种情况下删除 Template Haskell 可以解决问题,但这不是我真实代码中的选项。

编辑:

此外,以下编译失败。为什么会这样:

0 投票
1 回答
95 浏览

haskell - 使用不同参数调用时模板 Haskell 编译错误

为什么以下编译失败(在 GHC 7.4.2 上)?

请注意,以下编译正常:

有没有我可以用来编译前者的语言扩展?

我知道 Template Haskell 在这个例子中看起来很傻,但它是一个更复杂问题的简化版本,它需要 Template Haskell 处理任意大小的元组。

0 投票
1 回答
380 浏览

haskell - 我可以依靠 Template Haskell 扩展(使用 -ddump-splices)来始终生成有效代码吗?

我编写了一个小实用程序来扩展 Haskell 模块中的所有 TH 拼接,这样即使 TH 不可用,我也可以使用 haskell 模块。为此,我-ddump-splices在编译模块并捕获生成的代码时将选项传递给 GHC,然后将模块中的 TH 声明替换为捕获的代码。

但是,看起来 -ddump-splices 并不总是生成可编译的代码。具体来说,它似乎使用大括号进行布局,但没有在正确的位置添加分号!

这是我的测试文件中的一个示例-

在这里,它生成了左大括号和右大括号,但没有在两种情况下生成所需的分号。这会在编译时导致以下错误 -

0 投票
5 回答
216 浏览

haskell - 处理有限但任意数量的异质元素的函数

我正在研究博弈论学习的图书馆。在这种情况下,N代理聚集在一起并与环境交互。每个代理派生一个交互模型。一个代理的模型取决于它的N-1对手。我编写了代码来确定1代理和2代理的模型,并试图对其进行概括。这是我拥有的部分代码:

我追求一个systemToMockupN可以容纳任何有限数量的代理的函数定义。

代理是异构的,因此不能直接使用列表。我不能使用元组,因为我事先不知道大小。我尝试使用curryN,uncurryN等,但没有设法对元组的每个元素进行一次操作。我尝试以类似于printf没有成功的方式构建可变参数函数。

我知道我可以使用模板 haskell,但我想知道是否有更好的解决方案我忽略了。任何指向处理有限但任意数量的异构元素的代码的指针将不胜感激。

0 投票
1 回答
202 浏览

generics - 避免不属于 Haskell 类的样板文件

我正在开发人工生命实验的框架。该框架可以支持多个物种,只要每个物种都是代理类的一个实例。我将每个 Agent 包装在一个 AgentBox 中,这样我就可以在不知道底层类型的情况下读取、写入和使用它们。

这很好用,但是框架的用户必须编写一个小的样板函数。我很想知道是否有办法避免这种情况。我无法在 Agent 类中提供该函数的默认实现,因为该函数的类型签名没有提及类型变量。我可以忍受样板,但我很想知道是否有更好的方法。

这是我正在谈论的最小工作示例。最后的 getRock 函数是我希望避免强迫我的用户编写的函数。Agent 类的每个实例都需要提供一个函数来读取代理并将其包装在一个盒子中,并且实现看起来总是与 getRock 完全一样。

0 投票
3 回答
599 浏览

haskell - GHC 阶段限制(模板 Haskell)

我无法弄清楚为什么我在以下代码中得到“GHC 阶段限制”:

(如果代码没有提供任何有用的东西,请不要担心——为了清楚起见,它被提取的最小示例被混淆了)。

我不会从拼接代码中调用任何函数。为什么是阶段限制?

EDIT1:编辑以提供更简单的代码示例

0 投票
1 回答
676 浏览

haskell - 使用莎士比亚文本和外部文件

如何将以下示例转换为使用外部文件而不是嵌入的惰性文本准引号?

这是来自yesod 在线书籍

0 投票
2 回答
350 浏览

haskell - 模板 Haskell 可以生成多参数类型类实例吗?

的最新(2.8.0.0)定义Dec具有以下实例构造函数:

似乎只能实例化一种类型。有没有办法解决这个问题?