我希望能够使用一个函数组合相同长度的两个元组,类似于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 …