lenses

    2热度

    1回答

    我试图创建一个getter一个Lens和setter方法是我从另一个Lens有: import Control.Lens idL :: Lens s t a b -> Lens s t a b idL l = lens (\s -> view l s) (\s b -> set l b s) 但是,它未能与一个不起眼的(对我来说)错误: Expected type: Getting a

    8热度

    1回答

    如果我有带镜头的记录类型,是否可以在不使用底层记录访问器的情况下构造新记录? {-# LANGUAGE TemplateHaskell #-} import Control.Lens import Control.Lens.TH data Foo = Foo { _s :: String , _b :: Bool } deriving (Show, Eq)

    5热度

    2回答

    我具有从A型共图键入B. import qualified Data.Map as M import Data.Maybe tmGet k m = fromJust $ M.lookup k m tmSet k v = M.insert k v 我用Data.Map作为一示例实现中,但它可以是任何东西,例如一个Array甚至Bool -indexed元组: tmGet True =

    6热度

    3回答

    我试图执行包含元素列表的嵌套数据结构的操作。经过各种方法的磨合后,我终于决定将镜头作为实现这一目标的最佳方式。它们完美地用于查找和修改结构的特定元素,但到目前为止,我很难理解如何添加新元素。 从我读过的内容来看,我不能在技术上使用遍历,因为它违反了遍历法则以将新元素插入到列表中,假设我甚至可以弄清楚如何在Traversal中使用遍历第一名(我在Haskell方面仍然很弱,镜头包装中大部分东西的类型

    3热度

    1回答

    我有一个数据结构,可以理解为类似于Data.Map,因为它将一种类型的键映射到另一种类型的值。我想写这种类型的Control.Lens.At的实例,但我似乎无法满足所有要求。 鉴于Struct k v与lookup,insert,update和delete,我必须做什么,使instance At (Struct k v)工作?

    5热度

    2回答

    什么是使用镜头更新集合中元素的最佳方式?例如: case class Ingredient(name: String, quantity: Int) case class Recipe(val ingredients: List[Ingredient]) 如果我想用镜片创造出新的配方与单一成分的变化量,什么是做的最好的方法是什么? 我试过的方法是在飞行中创建镜头:​​。这虽然感觉有点麻烦:

    3热度

    1回答

    Control.Lens.Fold包含filtered,我可以在应用一些monadic动作之前使用它来过滤列表。似乎没有相应的filteredM - 但是有没有办法获得这种效果? 要清楚,说我有 xs :: [ MyType ] predM :: MyType -> MyMonad Bool actionM :: MyType -> MyMonad() 如何申请actionM到xs每个元

    3热度

    1回答

    我在我的代码中有一个共同的模式,我有一个对象列表,我将它们传递给函数choose让用户选择一个。 choose :: [a] -> (a -> String) -> IO Int 然而,返回一个Int是不幸的,因为现在我要使用部分(!!)访问所选择的元件。为了避免这种情况,我宁愿 choose :: [a] -> [Lens' [a] a] -> (a -> String) -> IO (Le

    2热度

    1回答

    我有几个数据结构,如 data Data1 = Data1 { _data1Field :: Int -- More fields } deriving (Eq, Show) makeLenses ''Data1 data Data2 = Data2 { _data2Field :: Int -- More fields } der

    5热度

    1回答

    有一个Scalaz地图镜头here的例子:丹·伯顿称它containsKey,并且它是由爱德华Kmett谈话的启发。在Scalaz 7中还有一个叫mapVPLens的东西,它对修改地图中的值很有用。 我的问题是:如果我有用于修改类型V的镜头和用于Map[K,V]的镜头,我该如何创作它们?我一直在寻找一个简单的例子,但斯卡拉兹仍然缺乏一些例子。 我感兴趣的是既Scalaz 6和7 Scalaz解决方