问题标签 [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.
string - 在 Haskell 中将字符串转换为类型构造函数
有谁知道 Haskell 中是否有这样的功能:
IE。它采用类型构造函数名称的字符串表示,并将其转换为实际的类型构造函数,无论是在表达式中还是在模式中。
编辑:我的总体目标是简化以下内容:
变成单个模式匹配,所以基本上将 Add 或 Sub 转换为字符串,在前面添加“I”,然后将其转换回类型。
haskell - 使用 Template Haskell,如何将相同的类型拼接到多个位置?
我正在为OpenGL类型定义矢量空间中的类实例,为了节省我的打字肌肉,我想使用 Template Haskell 为我编写一堆实例。
我从小处着手,通过定义函数来派生以下实例AdditiveGroup
:
这很好用,但请注意,我只$t
在牛津括号中拼接了一次。现在,派生VectorSpace
实例的函数:
但是,这很糟糕:
t_ts
错误中的和之间的区别t_tt
告诉我,每次我拼接$t
时 TH 都会创建一个新的、唯一的名称,当然,只有当这些类型相同时,定义才会起作用。
有没有办法用牛津括号获得我想要的行为,或者我是否必须退回到好的旧词法范围和Language.Haskell.TH
组合器?我知道使用 CPP 可能会更容易,但我想借此机会学习一些 TH。
haskell - 获取 Haskell 记录的字段名称作为字符串列表?
说我有以下内容:
我了解 Template Haskell 并且该reify
功能可以让我获得记录的字段名称。那是:
还有一种说法是这可以在没有模板 Haskell 的情况下完成。有人可以为此提供一个示例实现吗?
haskell - 以记录字段名称作为变量的模板 Haskell?
我有以下实现 monad 的代码。我正在尝试使用它来简化稍后具有更复杂逻辑的字段设置。
我会使用这样的代码:
此代码有效,但我想使用 Template Haskell 来简化 changeAlpha 函数。有这样的东西会很棒:
现在,我已经做到了:
但是,一旦我将其更改为:
我明白了:
没有变化工作。这可能吗?
haskell - 查看由 Template Haskell 生成的代码的首选方法
如您所知,Template Haskell 用于在编译时以编程方式生成各种 AST 拼接。
但是,接头通常非常不透明,并且通常很难辨别接头实际生成的内容。如果您Q
为拼接运行 monad,并且拼接是正确类型的,您将获得show
生成的 AST 片段的有效表示,但由于其非结构化布局,这种表示可能很难理解。
将一段 TH 生成的 AST 转换为类似于普通 Haskell 代码的东西的首选方法是什么,以便代码易于阅读和理解?可以从例如给定Dec
值重构源代码吗?是否必须阅读 GHC 核心代码?有没有办法至少构建 AST 以使其更具可读性(超出例如pretty-show
包的功能)?
haskell - 派生 Show 的模板 Haskell 数据声明
以下内容无法编译:
我根本无法弄清楚错误的含义:
有可能做这样的推导吗?
haskell - Haskell:如何判断一个类型是否是类的实例?
我想创建一个模板 Haskell 函数,这样:
将导致True
ifSomeType
是 , 的实例Read
,False
否则。
我试图查看的结果,reify
我想我正在寻找ClassI
构造函数的内容,但是文档有些缺乏,而且我在破译我需要的东西时遇到了麻烦。有人可以就在哪里查找创建上述函数所需的数据提供指导吗?
haskell - Haskell 是否有指向记录成员的指针/引用?
::*
我可以在 C++ 中使用、.*
和->*
语法创建和引用指向结构成员的相对指针,例如:
在 Haskell 中,我可以轻松地为记录获取者创建临时标签,例如:
Afaik,但是我不能使用这些 getter 作为标签来更新记录,例如:
有没有一种简单的方法可以在不为每个记录设置器编码的情况下做到这一点?
haskell - 使用 Template Haskell 在编译时评估函数
我正在编写一个简单的 HashString 类,它只是一个字符串及其哈希:
现在我试图在编译时生成这些,例如:
我希望哈希和文本打包在编译时发生。我该怎么做呢?
到目前为止,这是我尝试过的,但我不确定它是否正确,也不确定它在编译时会做所有事情: