问题标签 [scrap-your-boilerplate]

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 投票
2 回答
607 浏览

haskell - 派生函子实例,而不是最后一个类型参数

与我今天早些时候提出的这个问题有关。

我有一个包含大量案例的 AST 数据类型,它由“注释”类型参数化

我有 def 和 var 的具体实例,比如Defand Var

我想要的是自动派生fmap哪个作为第一个参数的函子运行。我想派生一个看起来像这样的函数:

当我使用 normalfmap时,我收到一条编译器消息,表明 fmap 正在尝试将其函数应用于最后一个类型参数,而不是第一个。

有没有一种方法可以导出所描述的函数,而无需编写一堆样板文件?我试过这样做:

但我收到以下错误:

我正在使用其他人的代码库,所以如果我不必在任何地方切换类型参数的顺序,那将是理想的。

0 投票
0 回答
142 浏览

haskell - 为 Text.PrettyPrint.Doc 派生 Typeable

我有一个 AST 类型,我想将它派生为 Typeable,这样我就可以对它进行 Scrap-your-boilerplate 泛型遍历。

但是,树使用Doc来自 pretty 包的 Text.PrettyPrint 库类型的消息进行注释。要派生 Typeable,需要有 的可类型实例Doc

这是我尝试过但失败的方法:

给出这个错误:

或者,我尝试派生我自己的实例:

这给出了这个错误:

难道我做错了什么?是否有一种标准方法可以为其他库中给出的类型派生可类型化?

问题是,实例并不是非常重要。我知道我的 AST 没有任何部分以递归方式存储在 Doc 值中。但是如果我没有那个实例,GHC 就会抱怨。

0 投票
1 回答
1313 浏览

haskell - 什么是“废弃你的样板”?

我看到人们谈论在 Haskell 中废弃你的样板泛型编程。这些术语是什么意思?我什么时候想使用 Scrap Your Boilerplate,我该如何使用它?

0 投票
1 回答
588 浏览

haskell - 从 Data.Data.Data 了解 gfoldl 的类型签名

Data定义为其核心功能之一gfoldl

它的目的c和目的是c (d -> b)什么?为什么它不只是一个普通的折叠,比如

0 投票
2 回答
178 浏览

haskell - SYB:可以用 gfoldl 重写 listify 结果的映射吗?

我可以使用 SYB 的 gfoldl 一次性对 listify 的结果进行映射吗?

例如,考虑以下代码:

我不喜欢在 numVal 函数中这样,我必须考虑 Expr 类型的不同数据构造函数,而我只对 Num 构造函数感兴趣。我宁愿用下面的 vals 函数替换 isNum 和 numVals:

这可以用gfoldl完成吗?如何?

0 投票
1 回答
447 浏览

haskell - SYB 参观 GHC AST

我编写了一个使用 Haskell-src-exts 访问 AST 的程序。我正在尝试将其转换为使用 GHC API。前者使用Uniplate,而对于后者,不幸的是我不得不使用SYB(文档非常稀缺)。

这是原始代码:

我需要访问函数绑定、匹配和表达式。这是我设法写的(不工作):

它抱怨有太多的实例id,但我不知道它到底是什么。相关的 GHC 模块是: http ://haddock.stackage.org/lts-3.10/ghc-7.10.2/HsBinds.html

我快疯了。目标是计算复杂性(如您在原始代码中所见)。我想切换到 GHC API,因为它使用与编译器相同的解析器,因此它可以解析每个模块而无需担心扩展。

编辑:这就是当前代码不起作用的原因:

0 投票
1 回答
91 浏览

haskell - 了解Haskell的Data.Data包的Constr类型

我试图了解 Data.Data 包的 Constr 类型。考虑下面的会话。dataTypeConstrs返回ConstrMaybe 的零参数和单参数构造函数的列表。由于明显的类型错误,尝试重新创建列表失败。它是 GHC 关于 Consr 值的特殊行为吗?

0 投票
1 回答
64 浏览

haskell - SYB 库函数

一段时间以来,我一直在使用一些废弃你的样板函数。尽管如此,我还是尝试编译一个导入Data.Dataand的模块,尽管编译器无法找到Data.Typeable一些类似everywhereand的函数。mkT这些功能在新版本的 GHC 中在哪里?

0 投票
0 回答
118 浏览

scala - 如何在 Shapeless 中使用 Scrap Your Boileplate 组合器“everything”遍历 Seq?

我想在 Shapeless 中使用 Scrap Your Boilerplate 实现来操作某些案例类,但我一直在试图弄清楚如何让 SYB 组合everything器遍历 type 的字段Seq[...]

例如,定义树如下:

计算叶子的数量,下面的效果很好

但是当使用 aSeq来存储孩子而不是字段时Node

然后everything无法遍历字段 children :

我尝试了各种方法,但没有任何效果。我也不知道如何编写Datafor的正确实例Seq[...]

更新:为from调整Data实例似乎可行Listshapeless.Data

0 投票
1 回答
374 浏览

haskell - 递归型镜头

我正在尝试创建一些代码,可以采用任何递归语法数据类型和该数据类型的任何表达式,并生成相同类型的所有子表达式的列表,建立起来,有点像scan类型的递归.

我在下面为随附的玩具计算器语法类型编写了两个手动示例EExp。第一个示例使用 Lens 库中的棱镜和透镜,仅适用于一个eg1示例表达式,而第二个函数仅使用手动代码,但适用于任何EExp表达式。

理想情况下,我可以使用模板 haskell 或其他东西来自动构建一个递归函数,该函数可以专注于该类型(如棱镜/透镜)中任何类型的表达式的每个子表达式,因此也可以轻松打印出列表赋予它的任何表达式的所有片段。

不过,我对接下来要尝试或研究的内容有点困惑。非常感谢任何帮助!