我试图创建一个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
我具有从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 =
我有一个数据结构,可以理解为类似于Data.Map,因为它将一种类型的键映射到另一种类型的值。我想写这种类型的Control.Lens.At的实例,但我似乎无法满足所有要求。 鉴于Struct k v与lookup,insert,update和delete,我必须做什么,使instance At (Struct k v)工作?
什么是使用镜头更新集合中元素的最佳方式?例如: case class Ingredient(name: String, quantity: Int)
case class Recipe(val ingredients: List[Ingredient])
如果我想用镜片创造出新的配方与单一成分的变化量,什么是做的最好的方法是什么? 我试过的方法是在飞行中创建镜头:。这虽然感觉有点麻烦:
我有几个数据结构,如 data Data1 = Data1
{ _data1Field :: Int
-- More fields
} deriving (Eq, Show)
makeLenses ''Data1
data Data2 = Data2
{ _data2Field :: Int
-- More fields
} der