178得票1回答
镜头,fclabels,data-accessor - 哪个用于结构访问和修改的库更好?

至少有三种流行的库可用于访问和操作记录字段。我所知道的有:data-accessor、fclabels 和 lenses。 个人而言,我开始使用 data-accessor 并一直在使用它们。然而最近在 haskell-cafe 上出现了 fclabels 更优秀的观点。 因此,我对这三个...

172得票1回答
悄悄地将镜头和 CPS 带过价值限制

我正在编写van Laarhoven透镜的一种OCaml编码,但由于值限制而遇到了困难。 相关代码如下: module Optic : sig type (-'s, +'t, +'a, -'b) t val lens : ('s -> 'a) -> ('s -> ...

84得票2回答
功能镜头

有人能向我解释一下函数式镜头吗?这是一个令人惊讶的难以通过谷歌搜索的主题,我没有取得任何进展。我知道的只是它们提供与面向对象编程中的get/set功能类似的功能。

40得票3回答
镜头有什么用处?

我似乎无法找到任何有关镜头在实际示例中用途的解释。下面这段来自Hackage页面的简短段落是我能找到的最接近答案的内容: 这个模块提供了一种方便的方式来访问和更新结构中的元素。它非常类似于Data.Accessors,但是更加通用并且依赖更少。我特别喜欢它如何干净地处理状态单子中的嵌套...

27得票2回答
使用镜片的优缺点是什么?

镜片(Lenses) 在具有显着优势的同时似乎没有任何缺点,与标准Haskell相比: 我是否应该尽可能使用镜片? 是否有性能考虑?此外,模板Haskell是否有任何显着的开销?

22得票2回答
对于Control.Lens.Setter来说,将类型包装在functors中是否是冗余的?

我正在观看介绍Control.Lens的视频。 这让我想知道为什么需要在Setter类型中用函子包装东西。 它(大致)的定义如下: type Control.Lens.Setter s t a b = (Functor f) => (a -> f a) -> s ->...

20得票1回答
类型变量将会逃离其作用域

我正在尝试通过给函数添加一个镜头参数(来自xml-lens包)来重构它。我对类型量词缺少一些理解。这里发生了什么? *Main> let z name = listToMaybe $ pom ^.. root ./ ell name . text *Main> :t z z ::...

20得票2回答
Ramda js:针对嵌套的对象和嵌套的对象数组的镜头

使用 Ramda.js(和 lens),我希望修改下面的 JavaScript 对象,将 ID 为 "/1/B/i" 的对象中的 "NAME:VERSION1" 更改为 "NAME:VERSION2"。 我想使用 lens,因为我只想更改一个深度嵌套的值,但否则保留整个结构不变。 我不想使...

20得票2回答
使用“lens”从映射中获取多个结果

假设有以下导入: > import Control.Lens Control.Lens> import qualified Data.Map as Map 还有一个被定义为以下内容的映射值: Control.Lens Map> let m = Map.fromList...

20得票1回答
镜头/棱镜与错误处理

假设我有一对转换函数string2int :: String -> Maybe Int int2string :: Int -> String 使用Optics,我可以很容易地表示这些。 stringIntPrism :: Prism String Int 然而,如果我想要表示...