lenses相关内容

功能镜片

有人可以向我解释一下功能性镜片吗?对于谷歌来说,这是一个令人惊讶的困难主题,我没有取得任何进展.我只知道它们提供了与面向对象类似的获取/设置功能. 解决方案 一个lens由两个函数组成,一个getter和一个setter: data Lens a b = Lens { getter :: a ->b,setter :: b ->->一个 } 例如,我们可能有一对镜片的第一部分和第二部分: ..
发布时间:2021-12-14 12:01:15 其他开发

镜头、fclabels、数据访问器——哪个库用于结构访问和变异更好

至少有三个用于访问和操作记录字段的流行库.我知道的有:数据访问器、fclabels 和镜头. 我个人是从数据访问器开始的,现在我正在使用它们.然而最近在 haskell-cafe 上,有人认为 fclabels 更胜一筹. 因此,我对这三个(或许更多)库的比较感兴趣. 解决方案 我知道至少有 4 个库提供镜头. 镜头的概念是它提供了与 同构的东西 data 镜头 a ..
发布时间:2021-12-14 11:34:04 其他开发

镜头的用途/用途是什么?

我似乎找不到任何关于在实际示例中使用什么镜头的解释.来自 Hackage 页面的这个短段落是我找到的最接近的: 该模块提供了一种访问和更新结构元素的便捷方式.它与 Data.Accessors 非常相似,但更通用一点,依赖项更少.我特别喜欢它在状态 monad 中处理嵌套结构的干净程度. 那么,它们有什么用?与其他方法相比,它们有什么优点和缺点?为什么需要它们? 解决方案 它们 ..
发布时间:2021-09-11 20:05:14 其他开发

使用镜头插入特定位置的列表中

我正在尝试对包含元素列表的嵌套数据结构进行操作.经过各种方法的摸索之后,我最终选择了镜片作为实现此目的的最佳方法.它们非常适合查找和修改结构的特定元素,但是到目前为止,我对如何添加新元素感到困惑. 根据我的阅读,从技术上讲,我不能使用遍历,因为它违反了遍历律,无法在列表中插入新元素,并且假设我什至可以弄清楚如何在遍历中使用遍历.第一名(我对Haskell仍然很虚弱,并且镜头包装中大多数东西的 ..
发布时间:2020-11-22 07:02:04 其他开发

字符串定义可用于无形镜片

我想使用无形透镜来通过String定义访问案例类字段的值. 我知道这段代码有效. case class Test(id: String, calc: Long) val instance = Test("123232", 3434L) val lens = lens[Test] >> 'id val valueOfFieldId = lens.get(instance) 但是我 ..
发布时间:2020-06-29 19:49:08 其他开发

在无形状的HMap中添加或修改值

有人知道我如何在无形状的HMap中添加或修改值吗?我在HMap定义上看到的唯一功能是: get +(看起来正在创建新地图并添加(k,v)元组) -(与上面相同) 我怀疑我需要使用镜头吗? 解决方案 shapeless.HMap是不可变的.它是scala.collection.immutable.Map的包装(具有类型级别的增强功能). +添加或修改一对(返回新的HMa ..
发布时间:2020-06-29 19:49:05 其他开发

如何获得带有过载字段名称的经典镜头?

我正在尝试为具有相同字段名称的记录构建镜头.除此之外,我正在尝试“包装/扩展"这些基本记录,并希望相同的字段名称可用于包装/扩展的记录(我相信,经典的镜头也可以这样做).我如何获得以下工作: -- Data types for context of the code snippet below data Download = Download { userId :: UserId ..
发布时间:2020-06-29 19:48:59 其他开发

Scala单片眼镜中的过滤列表

给出以下代码: case class Person(name :String) case class Group(group :List[Person]) val personLens = GenLens[Person] val groupLens = GenLens[Group] 我该如何从选择中“过滤"某些人,而不是通过索引,而不是通过Person的特定属性,例如: val ..
发布时间:2020-06-29 19:48:54 其他开发

镜头/棱镜具有错误处理

假设我有一对转换函数 string2int :: String -> Maybe Int int2string :: Int -> String 我可以使用Optics轻松地表示这些. stringIntPrism :: Prism String Int 但是,如果要表示失败原因,则需要将它们保留为两个单独的函数. string2int :: String -> Val ..
发布时间:2020-06-29 19:48:46 其他开发

仅使用一种类型推导嵌套的无定型镜片

我正试图提出与Classy Lenses相似的东西来与cats-mtl一起使用.为此,我只想基于提供的类型构造一个镜头.我发现无法使用Shapeless中提供的操作来做到这一点,所以我正在写一个新的. import shapeless._ class Classy[O[_, _], S, A](val get: O[S, A]) object Classy { def apply[O ..
发布时间:2020-06-29 19:48:43 其他开发

在Scala常规课程上使用镜头

Scala最受欢迎的JSON库具有对案例类进行序列化和反序列化的功能. 不幸的是,在Scala 2.11发布之前,case类可以具有的参数数量受到限制(最多22个).作为解决此问题的方法,可以改用常规类. (例如:如何反序列化使用* non-case *类从带有Scala的JSON中提取?). 但是,这失去了案例类的好处.例如,没有自动生成的副本构造函数,并且镜头不适用于常规类,因此操 ..
发布时间:2020-06-29 19:48:40 其他开发

Jquery图像镜头 - 动力学JS图像ID

我正在尝试在Kinetic JS画布上使用jquery图像镜头 http://jsfiddle.net/user373721 / 7f8qM / 15 / 。我遇到的挑战是如何在画布中找到图像的ID,我试过: myImage.onload = function( ){ var yoda = new Kinetic.Image({ x:0, y:0, image:myImage, wi ..
发布时间:2018-07-25 17:35:03 其他开发

将吸气剂合并为一个折叠

本着以下问题的精神: 使用”镜头“从地图获取多个结果 组合镜头 我现在正在寻找一种将多个 Getters 合并成一个折叠,如下所示: ('a','b','c','d')^ ..(_1≠_2 _3) 会导致这种情况: ['a','b','c'] 但上面的代码实际上失败并显示以下消息: (Accessor(Endo [Char ..
发布时间:2018-06-05 11:46:25 其他开发