我希望能够使用一个函数组合相同长度的两个元组,类似于zipWith
来自base
. 例如,对于长度为 3 元组的情况:
zipTupleWith f (a0,a1,a2) (b0,b1,b2) = (f a0 b0, f a1 b1, f a2 b2)
Run Code Online (Sandbox Code Playgroud)
虽然我想要一个适用于任何长度的函数。
我zipTupleWith
使用该lens
包创建了一个函数:
zipTupleWith :: (Each s1 t1 a a, Each s2 s2 b b) => (a -> b -> a) -> s1 -> s2 -> t1
zipTupleWith f a b = a & partsOf each %~ flip (zipWith f) (b ^.. each)
Run Code Online (Sandbox Code Playgroud)
zipWith
只要函数的类型为 ,这可以是两个元组a -> b -> a
。这个限制是因为partsOf
在参数上使用了函数a …