lenses相关内容
有人可以向我解释一下功能性镜片吗?对于谷歌来说,这是一个令人惊讶的困难主题,我没有取得任何进展.我只知道它们提供了与面向对象类似的获取/设置功能. 解决方案 一个lens由两个函数组成,一个getter和一个setter: data Lens a b = Lens { getter :: a ->b,setter :: b ->->一个 } 例如,我们可能有一对镜片的第一部分和第二部分:
..
至少有三个用于访问和操作记录字段的流行库.我知道的有:数据访问器、fclabels 和镜头. 我个人是从数据访问器开始的,现在我正在使用它们.然而最近在 haskell-cafe 上,有人认为 fclabels 更胜一筹. 因此,我对这三个(或许更多)库的比较感兴趣. 解决方案 我知道至少有 4 个库提供镜头. 镜头的概念是它提供了与 同构的东西 data 镜头 a
..
我似乎找不到任何关于在实际示例中使用什么镜头的解释.来自 Hackage 页面的这个短段落是我找到的最接近的: 该模块提供了一种访问和更新结构元素的便捷方式.它与 Data.Accessors 非常相似,但更通用一点,依赖项更少.我特别喜欢它在状态 monad 中处理嵌套结构的干净程度. 那么,它们有什么用?与其他方法相比,它们有什么优点和缺点?为什么需要它们? 解决方案 它们
..
我有这些类型(还有更多): data Player = PlayerOne | PlayerTwo deriving (Eq, Show, Read, Enum, Bounded) data Point = Love | Fifteen | Thirty deriving (Eq, Show, Read, Enum, Bounded) data PointsData = Points
..
我正在尝试对包含元素列表的嵌套数据结构进行操作.经过各种方法的摸索之后,我最终选择了镜片作为实现此目的的最佳方法.它们非常适合查找和修改结构的特定元素,但是到目前为止,我对如何添加新元素感到困惑. 根据我的阅读,从技术上讲,我不能使用遍历,因为它违反了遍历律,无法在列表中插入新元素,并且假设我什至可以弄清楚如何在遍历中使用遍历.第一名(我对Haskell仍然很虚弱,并且镜头包装中大多数东西的
..
我想使用无形透镜来通过String定义访问案例类字段的值. 我知道这段代码有效. case class Test(id: String, calc: Long) val instance = Test("123232", 3434L) val lens = lens[Test] >> 'id val valueOfFieldId = lens.get(instance) 但是我
..
有人知道我如何在无形状的HMap中添加或修改值吗?我在HMap定义上看到的唯一功能是: get +(看起来正在创建新地图并添加(k,v)元组) -(与上面相同) 我怀疑我需要使用镜头吗? 解决方案 shapeless.HMap是不可变的.它是scala.collection.immutable.Map的包装(具有类型级别的增强功能). +添加或修改一对(返回新的HMa
..
我遇到了将Control.Lens与 一起使用的问题 -XTypeFamilies GHC编译指示时使用数据类型. {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE TypeFamilies #-} import Control.Lens (makeLenses) class SomeClass t where data SomeDa
..
我正在尝试为具有相同字段名称的记录构建镜头.除此之外,我正在尝试“包装/扩展"这些基本记录,并希望相同的字段名称可用于包装/扩展的记录(我相信,经典的镜头也可以这样做).我如何获得以下工作: -- Data types for context of the code snippet below data Download = Download { userId :: UserId
..
我是第一次尝试单片眼镜. 这里是案例类: case class State(mem: Map[String, Int], pointer: Int) 我想使用标准scala进行的当前修改: def add1 = (s: State) => s.copy( mem = s.mem.updated("a", s.mem("a") + 1), pointer = s.poi
..
给出以下代码: case class Person(name :String) case class Group(group :List[Person]) val personLens = GenLens[Person] val groupLens = GenLens[Group] 我该如何从选择中“过滤"某些人,而不是通过索引,而不是通过Person的特定属性,例如: val
..
假设我有一对转换函数 string2int :: String -> Maybe Int int2string :: Int -> String 我可以使用Optics轻松地表示这些. stringIntPrism :: Prism String Int 但是,如果要表示失败原因,则需要将它们保留为两个单独的函数. string2int :: String -> Val
..
我正试图提出与Classy Lenses相似的东西来与cats-mtl一起使用.为此,我只想基于提供的类型构造一个镜头.我发现无法使用Shapeless中提供的操作来做到这一点,所以我正在写一个新的. import shapeless._ class Classy[O[_, _], S, A](val get: O[S, A]) object Classy { def apply[O
..
Scala最受欢迎的JSON库具有对案例类进行序列化和反序列化的功能. 不幸的是,在Scala 2.11发布之前,case类可以具有的参数数量受到限制(最多22个).作为解决此问题的方法,可以改用常规类. (例如:如何反序列化使用* non-case *类从带有Scala的JSON中提取?). 但是,这失去了案例类的好处.例如,没有自动生成的副本构造函数,并且镜头不适用于常规类,因此操
..
我有一个这样的对象数组: [ { name: "Group 1", value: "Foo" }, { name: "Group 2", value: "Bar" }, { name: "Group 1", value: "Baz" } ] 我想使用局部镜片库将这些组转换为按键具有相应组项目的对象,如下所示: { "Group 1": [ { name: "
..
这是我所拥有的,尚未编译: {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE StandaloneDeriving #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUA
..
基于: import shapeless._ case class Content(field: Int) lens[Content] >> 'field 我正在尝试创建一种镜头创建方法, def makeLens[T > s 但是似乎并不明显.有可能吗? 如果没有,我想要达到的最终结果是一种通用的方法
..
我正在尝试在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
..
本着以下问题的精神: 使用”镜头“从地图获取多个结果 组合镜头 我现在正在寻找一种将多个 Getters 合并成一个折叠,如下所示: ('a','b','c','d')^ ..(_1≠_2 _3) 会导致这种情况: ['a','b','c'] 但上面的代码实际上失败并显示以下消息: (Accessor(Endo [Char
..
{ - #LANGUAGE TemplateHaskell# - } { - #LANGUAGE ExistentialQuantification# - } 模块玩具其中 导入Control.Lens 数据Bar = Bar {_barish :: String} data Foo =全部显示a => Foo {_fooish :: a} $(makeLense
..