gpt4 book ai didi

haskell - 是否有用于元组的 zipWith 模拟?

转载 作者:行者123 更新时间:2023-12-04 05:36:22 27 4
gpt4 key购买 nike

初步说明:这是 a deleted question by SeanD 的转版.

就像有 zipWith对于列表...

GHCi> zipWith (+) [1,2] [3,4]
[4,6]

...感觉应该有一些类似于元组的东西,本着...的精神
tupleZipWith (+) (1,2) (3,4)

......但似乎没有任何明显类似的东西在基地。我有哪些选择?

最佳答案

一种选择是使用 tuples-homogenous-h98包,它为具有适当 Applicative 的同质元组提供新类型的包装器实例:

GHCi> import Data.Tuple.Homogenous
GHCi> import Control.Applicative
GHCi> liftA2 (+) (Tuple2 (1,2)) (Tuple2 (3,4))
Tuple2 {untuple2 = (4,6)}
GHCi> (>) <$> Tuple3 (7,4,7) <*> Tuple3 (6,6,6)
Tuple3 {untuple3 = (True,False,True)}

如果你有一个除了 tuples-homogenous-h98 之外的最喜欢的同构元组/固定大小向量/固定大小列表库,那么它很可能也有合适的 ZipList - 像 Applicative实例。

对于配对的问题略有不同的看法,您可能需要考虑 Data.Biapplicative 来自双仿函数:
GHCi> import Data.Biapplicative
GHCi> bimap (+) (+) (1,2) <<*>> (3,4)
(4,6)

这种方法的一个好处是它可以处理异构对:
GHCi> bimap (+) (+) (1,2.5) <<*>> (3,4)
(4,6.5)
GHCi> bimap (+) (++) (1,"foo") <<*>> (3,"bar")
(4,"foobar")

关于haskell - 是否有用于元组的 zipWith 模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50032674/

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