问题标签 [lenses]
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.
scala - 基于 Scala 类型的属性提取器 - 仅吸气剂镜头?
从数据容器(例如案例类)中提取类型的最佳方法是什么。
例如,如果我有一个type Tagged[U] = { type Tag = U}
标记类型trait PID
,它是标记的 Inttype ProductId = Int with Tagged[PID]
或 scalaz 样式type ProductId = Int @@ PID
,并说产品中的其他字段type Name = String @@ PName
等,以及一个包含产品属性的数据容器;
我怎样才能编写一个通用的提取器A => B
样式方法而不求助于反射?
原因是我想在运行时从 Product 容器中动态提取一个字段。即用户传入他们想要提取的产品的属性。
即,如果我想动态获取ProductId
,我可以编写一个采用类型并返回值的方法,例如
还是我把事情复杂化了。
我可以编写简单的提取器类,它采用 A => B 函数并为每种类型定义它;
然后在需要的地方添加它们。
但这似乎很麻烦。
我觉得 Lens 之类的东西在这里会很有用。
scala - Scala递归宏?
我想知道 Scala 是否支持递归宏扩展,例如我正在尝试编写一个带有镜头宏的镜头库来执行此操作:
鉴于lens(a)(_.b.c.d)(f)
,我想将其转换为a.copy(b = lens(a.b)(_.c.d)(f))
编辑: 我在这里取得了一些不错的进展
List[TermName]
但是,对于上面的示例,我无法找出创建访问器的通用方法,因为我有List(TermName('b'), TermName('c'), TermName('d')))
,我想生成一个匿名函数,_.b.c.d
即(x: A) => x.b.c.d
。我怎么做?
基本上,我怎样才能以通用的方式编写这些行?
haskell - 如何实现 Haskell 的“使用函数组合来组合镜头”具有奇怪的参数顺序?
我一直在阅读A wreq 教程:
镜头提供了一种关注 Haskell 值的一部分的方法。比如
Response
type有一个responseStatus
lens,重点关注服务端返回的状态信息。该
^.
运算符将一个值作为其第一个参数,将一个镜头作为其第二个参数,并返回镜头聚焦的值部分。我们使用函数组合来组合镜头,这使我们能够轻松地专注于深度嵌套结构的一部分。
我想不出一种方法,如何使用这种参数顺序完成的函数组合可以按该顺序处理嵌套结构。
看:r ^. responseStatus . statusCode
可能是r ^. (responseStatus . statusCode)
或(r ^. responseStatus) . statusCode
。
在第一个中说我们构造了一个函数,它首先处理statusCode
(从记录中获取它Status
? - 正如我可以从显示的值中推断出来的那样Status {statusCode = 200, statusMessage = "OK"}
),然后将它传递给responseStatus
必须处理响应状态的函数。所以,反过来说:实际上,状态码是响应状态的一部分。
第二次阅读对我来说也没有意义,因为它也首先处理状态代码。
haskell - 对具有约束的数据进行 makeLenses (DatatypeContexts)
我可以在makeLenses
具有约束的数据类型上使用模板吗?如果可以,如何使用?我想这样做而不阅读有关Template Haskell的所有内容。
在 GHC 我有这个例子:
这会产生这个编译错误:
所以我认为它产生了:
我也试过makeFields
and makeClassy
,无济于事。
我知道我可以解决这个问题:
但是有没有办法使用makeLenses
或 Template Haskell 来做到这一点?
我正在使用 GHC 7.8.4lens
版和 4.8 版。
(注意:我知道关于 makeLenses 有类似的问题,但我仍然无法让它工作。我是 haskell 的初学者。)
ocaml - 偷窥镜头和CPS超过价值限制
我在 OCaml 中编码一种 van Laarhoven 镜头,但由于价值限制而遇到困难。
相关代码如下:
在这里,我将镜头表示为更高阶的类型,即 CPS 转换函数的转换器(如此('a -> 'b) -> ('s -> 't)
处所建议和所讨论的)。函数,和都具有完全泛化的类型,但它们的组合没有。lens
fst
build
lens fst build
如要点所示,完全可以编写_1
但是每次都必须手动构建这些镜头很乏味,使用高阶函数(如lens
.
有什么办法可以绕过这里的价值限制吗?
haskell - 为列表创建一个镜头(喜欢)
我正在尝试为以下数据结构创建镜头。我正在使用lens-family
.
出于各种原因,我想避免使用 Template Haskell。一方面,它似乎不适用于我的 ghc 版本(7.8.3),这是另一个(超出范围)问题。
为唱片制作镜头并不难。
但似乎 lens-family 没有列表的默认镜头。我认为这是可能的。有为lens
包。这些是我失败的尝试:
他们都得到一个类似于这个的错误:
如何定义_last
镜头?
编辑:这是一个构建的版本:
虽然,正如大卫/丹尼尔指出的那样,_last
应该是一个遍历,而不是一个镜头。
haskell - Could someone explain the diagram about the `lens` library?
If you browse through Lens entry on hackage, Lens Github's repo, or even google about Lens, you will find a lot of partial references such as introductory tutorials/videos, examples, overviews and so on. Since I already know most of the basics, I am looking for a more complete reference that would help me to get more knowledge about the advanced features. In other words, I still have no idea what this means and couldn't find a resource complete enough to explain this graphic as a whole. Ideas?
haskell - 弄乱镜头时输入错误
尝试编译某些镜头代码时遇到类型错误。
错误是:
如果我直接使用 ilL,这个错误就会消失。但是,我确实需要使用 let 进行镜头定义。我该如何解决这个问题?
haskell - 如何使用 Lenses 遍历并分配给 Map 中的某些(但不是全部)元素
我一直在尝试使用镜头和容器并取得了一些成功,但我在尝试使用 Data.Map 的过滤遍历时遇到了我的理解限制 - 我可以更改地图中的单个实例或遍历所有实例,但我不能弄清楚如何对一些可识别的分区(即范围内的键)进行操作。
本质上,我正在尝试对地图做一些类似于 Gabriel Gonzalez 优秀镜头教程对列表所做的事情 [1]
这是我的代码的工作框架,traverseSome
其中我不知道如何编写注释掉的函数。任何帮助都感激不尽!
[1] http://www.haskellforall.com/2013/05/program-imperatively-using-haskell.html
scala - Scalaz 镜头到 ReaderWriterState
给定,说
我该如何想出:
在利用ageL
镜头的同时。Scalaz Lens 有一些实用程序可以State
从.Lens
ReaderWriterState