问题标签 [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.
haskell - 派生函子实例,而不是最后一个类型参数
与我今天早些时候提出的这个问题有关。
我有一个包含大量案例的 AST 数据类型,它由“注释”类型参数化
我有 def 和 var 的具体实例,比如Def
and Var
。
我想要的是自动派生fmap
哪个作为第一个参数的函子运行。我想派生一个看起来像这样的函数:
当我使用 normalfmap
时,我收到一条编译器消息,表明 fmap 正在尝试将其函数应用于最后一个类型参数,而不是第一个。
有没有一种方法可以导出所描述的函数,而无需编写一堆样板文件?我试过这样做:
但我收到以下错误:
我正在使用其他人的代码库,所以如果我不必在任何地方切换类型参数的顺序,那将是理想的。
haskell - 为 Text.PrettyPrint.Doc 派生 Typeable
我有一个 AST 类型,我想将它派生为 Typeable,这样我就可以对它进行 Scrap-your-boilerplate 泛型遍历。
但是,树使用Doc
来自 pretty 包的 Text.PrettyPrint 库类型的消息进行注释。要派生 Typeable,需要有 的可类型实例Doc
。
这是我尝试过但失败的方法:
给出这个错误:
或者,我尝试派生我自己的实例:
这给出了这个错误:
难道我做错了什么?是否有一种标准方法可以为其他库中给出的类型派生可类型化?
问题是,实例并不是非常重要。我知道我的 AST 没有任何部分以递归方式存储在 Doc 值中。但是如果我没有那个实例,GHC 就会抱怨。
haskell - 什么是“废弃你的样板”?
我看到人们谈论在 Haskell 中废弃你的样板和泛型编程。这些术语是什么意思?我什么时候想使用 Scrap Your Boilerplate,我该如何使用它?
haskell - SYB:可以用 gfoldl 重写 listify 结果的映射吗?
我可以使用 SYB 的 gfoldl 一次性对 listify 的结果进行映射吗?
例如,考虑以下代码:
我不喜欢在 numVal 函数中这样,我必须考虑 Expr 类型的不同数据构造函数,而我只对 Num 构造函数感兴趣。我宁愿用下面的 vals 函数替换 isNum 和 numVals:
这可以用gfoldl完成吗?如何?
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,因为它使用与编译器相同的解析器,因此它可以解析每个模块而无需担心扩展。
编辑:这就是当前代码不起作用的原因:
haskell - 了解Haskell的Data.Data包的Constr类型
我试图了解 Data.Data 包的 Constr 类型。考虑下面的会话。dataTypeConstrs
返回Constr
Maybe 的零参数和单参数构造函数的列表。由于明显的类型错误,尝试重新创建列表失败。它是 GHC 关于 Consr 值的特殊行为吗?
haskell - SYB 库函数
一段时间以来,我一直在使用一些废弃你的样板函数。尽管如此,我还是尝试编译一个导入Data.Data
and的模块,尽管编译器无法找到Data.Typeable
一些类似everywhere
and的函数。mkT
这些功能在新版本的 GHC 中在哪里?
scala - 如何在 Shapeless 中使用 Scrap Your Boileplate 组合器“everything”遍历 Seq?
我想在 Shapeless 中使用 Scrap Your Boilerplate 实现来操作某些案例类,但我一直在试图弄清楚如何让 SYB 组合everything
器遍历 type 的字段Seq[...]
。
例如,定义树如下:
计算叶子的数量,下面的效果很好
但是当使用 aSeq
来存储孩子而不是字段时Node
然后everything
无法遍历字段 children :
我尝试了各种方法,但没有任何效果。我也不知道如何编写Data
for的正确实例Seq[...]
。
更新:为from调整Data
实例似乎可行List
shapeless.Data
haskell - 递归型镜头
我正在尝试创建一些代码,可以采用任何递归语法数据类型和该数据类型的任何表达式,并生成相同类型的所有子表达式的列表,建立起来,有点像scan
类型的递归.
我在下面为随附的玩具计算器语法类型编写了两个手动示例EExp
。第一个示例使用 Lens 库中的棱镜和透镜,仅适用于一个eg1
示例表达式,而第二个函数仅使用手动代码,但适用于任何EExp
表达式。
理想情况下,我可以使用模板 haskell 或其他东西来自动构建一个递归函数,该函数可以专注于该类型(如棱镜/透镜)中任何类型的表达式的每个子表达式,因此也可以轻松打印出列表赋予它的任何表达式的所有片段。
不过,我对接下来要尝试或研究的内容有点困惑。非常感谢任何帮助!