Haskell的Lens库中ix和element之间有什么区别

Ste*_*han 8 haskell haskell-lens

在Haskell的镜头库中,ix并且element都可以使用Int an来例如在某个索引处读取或写入列表元素,就像这样

ghci> [1..10] ^? ix 4
Just 5
ghci> [1..10] & ix 4 .~ 1
[1,2,3,4,1,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

同样地:

ghci> [1..10] ^? element 4
Just 5
ghci> [1..10] & element 4 .~ 1
[1,2,3,4,1,6,7,8,9,10]
Run Code Online (Sandbox Code Playgroud)

element和之间有什么区别ix

pha*_*dej 11

有了ix你可以索引不仅数量,但通过在地图如关键.该element索引Traverse的顺序.

?> let m = Map.fromList [("foo", 'f'), ("bar", 'b')]
?> m ^? ix "foo"
Just 'f'

?> m ^? element 0 -- Map is ordered container!
Just 'b'
Run Code Online (Sandbox Code Playgroud)

例如,差异更明显 IntMap

?> let im = IntMap.fromList [(1, "one"), (2, "two")]
?> im ^? ix 1
Just "one"
?> im ^? element 1
Just "two"
Run Code Online (Sandbox Code Playgroud)