问题标签 [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 回答
358 浏览

haskell - Couldn't match kind `*' against `#'

What the heck is going on here:

#xA;

I was trying the following in GHCi using TemplateHaskell (ghci -XTemplateHaskell)

#xA;

I was hoping to get an Exp out of this (which does have an instance of Show). I am doing this to insert information about haskell types in an application such that it is available as actual data, not as a string.

My goal is the following:

#xA;

I really don't understand that error message, what is '#' anyway? If there is #, is there also # -> # or * -> #? Is it something that relates to kinds like kinds relate to types (though I would not know what that could be)?


Okay, so I do understand now that GHC has a hierarchy of kinds and that `#' is a special kind of unboxed types. All well and good, but why does this error pop up? Maybe unboxed types do not play well with genercis?

I'm not fully sure that this makes sense to me yet, since I would consider unboxed types being an optimazition performed by the compiler. I also thought that if an instance of Data exists, it needs to be there for all types that could possible be included in the data structure.

Upon further investigation I believe that Names pose the problem, is there a way to circumvent them in dataToExpQ? How to use that argument anyway?

0 投票
1 回答
708 浏览

haskell - 编写重载字符串时如何删除样板文件?

给定以下代码:

我想删除围绕创建强类型字符串的样板。是否可以使用 Template Haskell(或其他方式)来实现这一点?

例如:

0 投票
2 回答
758 浏览

haskell - 使用自定义名称处理器而不是默认的基于“下划线”的“镜头”库生成镜头

标准makeLenses实现为以下划线开头的记录的所有字段生成镜头。由于许多原因,我非常不喜欢在我的记录中引入如此尴尬的命名约定的想法。我想要做的只是为记录的所有字段生成镜头,并通过在字段名称后附加一个后缀“L”来命名它们。

有了一个fc-labels库,我所要做的就是

但是镜头库的规则集和东西的配置要复杂得多,这并不容易引起人们的注意。所以我要求一个特定的配方来达到同样的效果。

0 投票
1 回答
5876 浏览

haskell - 使用模板 Haskell 获取关联的类型同义词

模板 Haskell 可以找出类型类中声明的关联类型同义词的名称和/或声明吗?我希望reify会做我想做的事,但它似乎并没有提供所有必要的信息。它适用于获取函数类型签名:

但是,向类添加关联的类型同义词不会导致输出中的任何更改(直到重命名):

如果我知道 的名称F,我可以查找有关它的信息:

但我一开始就找不到名字F。即使我添加了类型类的实例,InstanceD也没有关于定义的信息:

如果reify不起作用,除了手动列出关联类型同义词之外,是否有解决方法?

这个问题存在于 GHC 7.8.3 和 2.9.0.0 版本的 template-haskell 包中;它也存在于 GHC 7.4.2 中,带有 template-haskell 包的 2.7.0.0 版本。(我没有检查 GHC 7.6.*,但我想它也存在。)我对任何版本的 GHC 的解决方案感兴趣(包括“这仅在 GHC 版本V中修复”)。

0 投票
1 回答
413 浏览

haskell - Existential quantifier silently disrupts Template Haskell (makeLenses). Why?

I have this file:

and I get the following error message:

This is my first time attempting to use existential quantifiers; I have no idea why this combination of features breaks. Even more worryingly, why do I get no error message about makeLenses failing? I ran runhaskell Toy.hs

0 投票
6 回答
4211 浏览

haskell - 在编译时或运行时生成一个随机字符串,并在程序的其余部分使用它

最好的方法是什么?unsafePerformIO? 模板 Haskell?还有什么?我从来没有使用过其中任何一个,所以我不知道使用它们的许多细节。

请注意,程序每次运行时都会被编译,所以我在编译时或运行时生成字符串都没有关系。我还需要在整个代码的很多地方使用这个字符串,所以我不能真正以“正确”的方式来做它,让它成为一个 IO 操作,这需要太多其他代码放入 IO monad .

0 投票
2 回答
249 浏览

templates - 从模板 Haskell 代码生成最终代码

问题

是否可以从包含 Template Haskell 函数的代码中生成“纯”Haskell 代码?

我想获得扩展所有 Haskell 模板的引号和拼接的代码?(将它输入另一个 Haskell 编译器 (Haste),它还不支持 Template Haskell。)

例子

模块元组复制:

主要的:

可以扩展为:

0 投票
2 回答
410 浏览

haskell - Profiling Template Haskell

I have a TH-heavy file which takes around 30 seconds to compile. What are some techniques I can use to help debug the performance of my Template Haskell?

0 投票
1 回答
1236 浏览

haskell - 如何从 GHCi 中的记录制作镜头

我想和Lens图书馆玩一会儿。我已经将它加载到 GHCi 并创建了一个带有适当下划线的记录数据类型:

我想制作Foo使用makeLenses模板的镜头。我想这样做而不需要通读整套Template-Haskell 文档

我可以在 GHCi 提示符下输入什么咒语来让它工作?

0 投票
1 回答
143 浏览

haskell - 为什么声明拼接不允许在声明括号内?有解决方法吗?

我正在尝试制作一个 quasiquoter,它为类型声明定义了一些简单的糖。最简单的方法是使用一些正则表达式来修改输入文本字符串。但是当我编译这段代码大纲代码时:

GHC 生成错误消息:

为什么不允许这样做?有没有办法拼接声明?似乎唯一的选择是重新解析整个输入声明,这将是令人讨厌的。