Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 如何使用带有镜头的一元函数进行修改?_Haskell_Monads_Haskell Lens - Fatal编程技术网

Haskell 如何使用带有镜头的一元函数进行修改?

Haskell 如何使用带有镜头的一元函数进行修改?,haskell,monads,haskell-lens,Haskell,Monads,Haskell Lens,我需要一个镜头功能,其工作原理类似于上的,但具有一元操作: overM :: (Monad m) => Lens s t a b -> (a -> m b) -> (s -> m t) 虽然这个函数很容易定义(它实际上只是一个身份模WrappedMonad),但我想知道这样的函数是不是在lens中的某个地方定义的 在Control.Lens.Traversal中: traverseOf :: Over p f s t a b -> p a (f b) -&g

我需要一个镜头功能,其工作原理类似于上的,但具有一元操作:

overM :: (Monad m) => Lens s t a b -> (a -> m b) -> (s -> m t)
虽然这个函数很容易定义(它实际上只是一个身份模
WrappedMonad
),但我想知道这样的函数是不是在lens中的某个地方定义的


在Control.Lens.Traversal中:

traverseOf :: Over p f s t a b -> p a (f b) -> s -> f t
traverseOf = id

mapMOf :: Profunctor p =>
     Over p (WrappedMonad m) s t a b -> p a (m b) -> s -> m t
mapMOf l cmd = unwrapMonad #. l (WrapMonad #. cmd)
例如:

Prelude Control.Lens> traverseOf _1 (Just . (+2)) (2,2)
Just (4,2)

Prelude Control.Lens> mapMOf _1 (Just . (+2)) (2,2)
Just (4,2)

traverseOf
只是
id
,对AMP问题没有帮助。您需要使用
WrappedMonad
-固定镜头才能使用
traverseOf
@J.Abrahamson感谢您的澄清,从Traversal库中添加了
mapMOf
定义。
Prelude Control.Lens> traverseOf _1 (Just . (+2)) (2,2)
Just (4,2)

Prelude Control.Lens> mapMOf _1 (Just . (+2)) (2,2)
Just (4,2)