12得票3回答
Haskell 镜头:如何使 view 与 traverse 兼容?

我正在尝试通过在Haskell中实现来学习有关镜头的知识。我已经实现了如下所示的view组合器: {-# LANGUAGE RankNTypes #-} import Control.Applicative import Data.Traversable type Lens s a = ...

9得票2回答
使用lens库组合部分getter函数

我正在使用lens包,并且一直在思考以下问题是否有简单的解决方案。假设我有一个地图(或任何At实例),以及一个针对其值类型的透镜,即 aMap :: Map Int a aLens :: Simple Lens a b 我需要一个 getter。 g :: Getter (Map In...

7得票2回答
只使用常量属性,是否可能实现两个结构体之间的双向关系?

我的用例基于以下模型: struct Person { let name: String let houses: [House] } struct House { let owner: Person } 现在,理想情况下,我希望保持一个双向关系,每个房子都需要有恰好一个所有...

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

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

84得票2回答
功能镜头

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

9得票1回答
基于Monad类型类,是否有一个van Laarhoven光学实现?

据我所了解,每个van Laarhoven光学类型可以通过对类型构造函数的限制来定义: type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t type Traversal ...

7得票1回答
使用镜头构建谓词

我想使用一些 A 的镜头创建一个函数 A -> Bool。例如: data A = A { _foo :: Int, _bar :: Int } makeLenses ''A l :: [A] l' = filter (\a -> a^.foo > 100) l 过...

10得票2回答
为什么我的数据类型需要成为Monoid的实例才能使用这个镜头?

我在使用下面的代码处理一个包含类型为SceneGraph的'_scene'字段的记录。我已经使用makeLenses创建了它的镜头。inputGame :: Input -> Game -> Game inputGame i g = flip execState g $ do ...

14得票1回答
代数类型的镜头包

我正在使用 lens 包编程。一切都很顺利,直到我尝试访问代数类型上的某个字段:import Control.Lens data Type = A { _a :: Char } | B makeLenses ''Type test1 = _a (A 'a') test2 = (A 'a'...

13得票3回答
镜片和部分镜片有什么区别?

“Lens”和“Partial Lens”在名称和概念上看起来非常相似。它们有什么区别?在什么情况下需要使用其中之一? 标记Scala和Haskell,但欢迎与任何拥有镜头库的函数式语言相关的解释。