gpt4 book ai didi

haskell - 概括 mapAndUnzip

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

我正在寻找一种简单的方法来编写函数

mapAndUnzip :: (Functor f) => (a -> (b,c)) -> f a -> (f b, f c)

我并不完全相信 Functor是一个足够强大的约束,但我会用它来具体化。我希望能够在 f 时应用此功能有类型(仅举几例) [] , Data.Vector.Unboxed.Vector ,以及我自己的包装类型 [a]Vector a . (其他可能的类型包括 Array 、Repa 向量等)

我的主要要求是我不需要像 (Unbox (b,c)) 这样的约束。 , 仅 (Unbox b,Unbox c) .子要求:对每个输入元素只计算一次函数。

我看到一种方法可以为 Vector 执行此操作通过在映射输入时构建两个可变向量,但我希望有比为不同类型创建新类和我自己的实例更好的方法。 GHC.Util 的特定列表方式定义 mapAndUnzip让我觉得通用的解决方案可能是不可能的,但我想在破解我自己的解决方案之前我会得到第二个意见。

最佳答案

Functor足够了,你可以这样做:

(编辑:仅计算 g 一次)

mapAndUnzip g fa = (fmap fst fbc, fmap snd fbc)
where
fbc = fmap g fa

关于haskell - 概括 mapAndUnzip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25297157/

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