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

string - 在 Haskell 中将字符串转换为类型构造函数

有谁知道 Haskell 中是否有这样的功能:

IE。它采用类型构造函数名称的字符串表示,并将其转换为实际的类型构造函数,无论是在表达式中还是在模式中。

编辑:我的总体目标是简化以下内容:

变成单个模式匹配,所以基本上将 Add 或 Sub 转换为字符串,在前面添加“I”,然后将其转换回类型。

0 投票
1 回答
853 浏览

haskell - 使用 Template Haskell,如何将相同的类型拼接到多个位置?

我正在为OpenGL类型定义矢量空间中的类实例,为了节省我的打字肌肉,我想使用 Template Haskell 为我编写一堆实例。

我从小处着手,通过定义函数来派生以下实例AdditiveGroup

这很好用,但请注意,我只$t在牛津括号中拼接了一次。现在,派生VectorSpace实例的函数:

但是,这很糟糕:

t_ts错误中的和之间的区别t_tt告诉我,每次我拼接$t时 TH 都会创建一个新的、唯一的名称,当然,只有当这些类型相同时,定义才会起作用。

有没有办法用牛津括号获得我想要的行为,或者我是否必须退回到好的旧词法范围和Language.Haskell.TH组合器?我知道使用 CPP 可能会更容易,但我想借此机会学习一些 TH。

0 投票
1 回答
2437 浏览

haskell - 获取 Haskell 记录的字段名称作为字符串列表?

说我有以下内容:

我了解 Template Haskell 并且该reify功能可以让我获得记录的字段名称。那是:

还有一种说法是这可以在没有模板 Haskell 的情况下完成。有人可以为此提供一个示例实现吗?

0 投票
3 回答
845 浏览

haskell - 以记录字段名称作为变量的模板 Haskell?

我有以下实现 monad 的代码。我正在尝试使用它来简化稍后具有更复杂逻辑的字段设置。

我会使用这样的代码:

此代码有效,但我想使用 Template Haskell 来简化 changeAlpha 函数。有这样的东西会很棒:

现在,我已经做到了:

但是,一旦我将其更改为:

我明白了:

没有变化工作。这可能吗?

0 投票
3 回答
3967 浏览

haskell - 查看由 Template Haskell 生成的代码的首选方法

如您所知,Template Haskell 用于在编译时以编程方式生成各种 AST 拼接。

但是,接头通常非常不透明,并且通常很难辨别接头实际生成的内容。如果您Q为拼接运行 monad,并且拼接是正确类型的,您将获得show生成的 AST 片段的有效表示,但由于其非结构化布局,这种表示可能很难理解。

将一段 TH 生成的 AST 转换为类似于普通 Haskell 代码的东西的首选方法是什么,以便代码易于阅读和理解?可以从例如给定Dec值重构源代码吗?是否必须阅读 GHC 核心代码?有没有办法至少构建 AST 以使其更具可读性(超出例如pretty-show包的功能)?

0 投票
1 回答
978 浏览

haskell - Haskell 内省记录的字段名称和类型

根据最近的一次交流,我被说服使用 Template Haskell 生成一些代码以确保编译时类型安全。

我需要反省记录字段名称和类型。我知道我可以使用constrFields . toConstr :: Data a => a -> [String]. 但我需要的不仅仅是字段名称,我还需要知道它们的类型。例如,我需要知道类型为 的字段的名称Bool

如何构造一个函数,记录在哪里,f :: a -> [(String, xx)]字段名是字段类型?aStringxx

0 投票
1 回答
380 浏览

haskell - 派生 Show 的模板 Haskell 数据声明

以下内容无法编译:

我根本无法弄清楚错误的含义:

有可能做这样的推导吗?

0 投票
1 回答
779 浏览

haskell - Haskell:如何判断一个类型是否是类的实例?

我想创建一个模板 Haskell 函数,这样:

将导致TrueifSomeType是 , 的实例ReadFalse否则。

我试图查看的结果,reify我想我正在寻找ClassI构造函数的内容,但是文档有些缺乏,而且我在破译我需要的东西时遇到了麻烦。有人可以就在哪里查找创建上述函数所需的数据提供指导吗?

0 投票
2 回答
610 浏览

haskell - Haskell 是否有指向记录成员的指针/引用?

::*我可以在 C++ 中使用、.*->*语法创建和引用指向结构成员的相对指针,例如:

在 Haskell 中,我可以轻松地为记录获取者创建临时标签,例如:

Afaik,但是我不能使用这些 getter 作为标签来更新记录,例如:

有没有一种简单的方法可以在不为每个记录设置器编码的情况下做到这一点?

0 投票
1 回答
1300 浏览

haskell - 使用 Template Haskell 在编译时评估函数

我正在编写一个简单的 HashString 类,它只是一个字符串及其哈希:

现在我试图在编译时生成这些,例如:

我希望哈希和文本打包在编译时发生。我该怎么做呢?

到目前为止,这是我尝试过的,但我不确定它是否正确,也不确定它在编译时会做所有事情: