Haskell 如何使用镜头列表?

Haskell 如何使用镜头列表?,haskell,traversal,haskell-lens,Haskell,Traversal,Haskell Lens,我可以使用遍历列表吗?以下代码: f::[Int] -> [[Int]] f l = [l & i .~ 1 | i<-[ix 0], (l^? i) == Just 0] 我想我需要明确地给我一个类型,但每次尝试都失败了 问题不在于显式指定类型。每次你想要有一个镜头或横切的容器(镜头内对,镜头内列表,镜头内可能)你都需要使用 有关解释,请参见此问题: 所以你的例子应该这样写: import Control.Lens f :: [Int] -> [[Int]]

我可以使用遍历列表吗?以下代码:

f::[Int] -> [[Int]]
f l = [l & i .~ 1 |  i<-[ix 0], (l^? i) == Just 0]

我想我需要明确地给我一个类型,但每次尝试都失败了

问题不在于显式指定类型。每次你想要有一个镜头或横切的容器(镜头内对,镜头内列表,镜头内
可能
)你都需要使用

有关解释,请参见此问题:

所以你的例子应该这样写:

import Control.Lens

f :: [Int] -> [[Int]]
f l = [ l & i .~ 1 
      | Traversal i <- [Traversal $ ix 0]
      , l ^? i == Just 0
      ]
ghci> f [0,0,0]
[[1,0,0]]

谢谢!顺便问一下,有没有返回列表所有索引的库函数?类似这样:
指示l=[Traversal$ix i | i
ghci> f [0,0,0]
[[1,0,0]]