8得票2回答
镜头进入Swift属性

有没有一种方法可以自动生成Swift类中属性的getter/setter函数对?类似于Haskell中的镜头。我已经能够手动完成以下操作: class PropertyLens<U, T> { let getter: U -> T let setter: (...

8得票2回答
哪些编程语言支持镜头或类似的方式来更新不可变嵌套结构?

虽然许多人赞扬不变性,但我发现在主流编程中很难维护。根据我的经验,程序员很快就会使字段再次可变,以避免重构大量代码,这些代码必须传递更新后的对象以及返回值。 Scala 支持一些复制构造函数,但我不知道如何满意地解决更新复杂对象结构的问题。也许我错过了什么。 我尝试过的最佳实现是 Hask...

8得票2回答
使用自定义名称处理器为“镜头”库生成镜头,而不是默认的基于“下划线”的处理器。

标准的makeLenses实现会为所有以下划线开头的记录字段生成镜头。出于很多原因,我非常不喜欢为我的记录引入这样的笨拙命名约定。我想要做的是为记录的所有字段生成镜头,并通过仅将后缀"L"附加到字段名称来命名它们。 使用fc-labels库,我所要做的就是: mkLabelsWith (+...

8得票2回答
使用 Lens 作为 `map`

我希望将这行代码 map (^?! ix 0) [[0, 1], [4, 5], [9, 1]] 完全转换为使用lens的形式,类似于 [[0, 1], [4, 5], [9, 1]] & each . ix 0。但是类型不匹配。正确的做法是什么?

8得票2回答
为什么棱镜设置函数不返回Option/Maybe?

在功能光学中,一个良好的棱镜(在Scala中称为部分镜头)应该具有类型为'subpart -> 'parent -> 'parent的set函数,如果棱镜“成功”并且在结构上与给定的'parent参数兼容,则返回给定的'parent并修改相应的子部分以具有给定的'subpart'值。如果棱镜“...

8得票1回答
Clojure中的身份函数和Haskell中的id函数具有相同的用途和目的吗?

在Clojure中,我们有一个identity函数。它被如下使用: user=> (filter identity [1 2 3 nil 4 false true 1234]) (1 2 3 4 true 1234) user=> (partition-by identity ...

8得票3回答
如何使用镜头在地图中查找值,增加它或将其设置为默认值。

在处理名为AppState的状态时,我想要跟踪一些实例的数量,这些实例具有不同类型InstanceId的id。 因此,我的状态看起来像这样: import Control.Lens data AppState = AppState { -- ... , _in...

7得票1回答
部分透镜的构成

我希望找到最简洁的方法来修改嵌套在 Maybe 类型(或其他部分性建模类型)中的值。 以下是示例设置: {-# LANGUAGE TemplateHaskell #-} import Control.Lens data Outer = Outer { _inner :: Maybe I...

7得票2回答
如何编写返回Maybe的镜头(Haskell)

假设我有一个像at _这样的镜头,需要一些Maybe a: import Data.Map as M m = M.fromList [(1,(2,3))] --set 2nd element m ^. at 1 .~ Just (4,5) --gives fromList [(1,(4,5...

7得票1回答
有没有“缩小”的对应操作?

zoom函数可以让我们在某些状态变量已经被定义的情况下,只使用其中一部分状态变量进行状态操作。 {-# LANGUAGE TemplateHaskell #-} import Control.Lens import Control.Monad.Trans.State import Con...