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]]