作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种简单的方法来编写函数
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/
我正在寻找一种简单的方法来编写函数 mapAndUnzip :: (Functor f) => (a -> (b,c)) -> f a -> (f b, f c) 我并不完全相信 Functor是一个
我是一名优秀的程序员,十分优秀!