gpt4 book ai didi

haskell - 我将如何在 Haskell 中使用 lens 来复制 Python 的枚举?

转载 作者:行者123 更新时间:2023-12-02 02:51:52 24 4
gpt4 key购买 nike

Python的enumerate在列表上可以写成 zip [0..] .我查看了 Control.Lens.Traversal 和 Control.Lens.Indexed,但我无法弄清楚如何使用镜头将其推广到任何合理的容器(我犹豫地说“可穿越”)。

我猜 itraverseitraverseOf是关键。

最佳答案

如果您使用的容器是 FunctorWithIndex 的实例那么你可以简单地使用 imap (,) :

> imap (,) "abc"
[(0,'a'),(1,'b'),(2,'c')]

但如果索引不是位置,这将不起作用:
> let m = Map.fromList [('a', "foo"), ('b', "bar"), ('c', "foobar")])
> imap (,) m
fromList [('a',('a',"foo")),('b',('b',"bar")),('c',('c',"foobar"))]

相反,您可以使用 traversed ,这是一个索引遍历,其中索引是元素出现的顺序。这可以用于任何 Traversable .而不是 imap使用 iover traversed (与 imapOf 相同,但已被弃用):
> iover traversed (,) "abc"
[(0,'a'),(1,'b'),(2,'c')]

> iover traversed (,) m
fromList [('a',(0,"foo")),('b',(1,"bar")),('c',(2,"foobar"))]

关于haskell - 我将如何在 Haskell 中使用 lens 来复制 Python 的枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com