我有这段代码,我想压缩
runFn someFn $ toArray a1 $ toArray a2 $ toArray a3 $ toArray a4
我会设想类似的东西
runFn someFn <$> fmap toArray [a1, a2, a3, a4]
在这种情况下,runFn someFn
将创建一个部分应用的函数,等待其丢失的参数,然后将其一一应用于数组的元素。
我必须承认我不知道类型系统是否允许这样做。
编辑 按照要求 - 这里是实际的类型签名。但是我的问题是一个更普遍的问题:
如果这些参数的类型相同并且按数组元素部分应用函数数组元素,我可以将函数的参数放入数组中吗?
type Numbers = Array Number
foreign import _intersect :: Numbers -> Numbers -> Numbers -> Numbers -> Point2D
data Point2D = Point2D Number Number
toArray :: Point2D -> Numbers
toArray (Point2D x y) = [x, y]
a1 = Point2D 0.5 7.0
a2 = Point2D 3.0 5.1
b1 = Point2D 2.5 9.0
b2 = Point2D 2.1 3.6
intersection :: Numbers -- 2 element Array Number
intersection = _intersect (toArray a1) (toArray a2) (toArray b1) (toArray b2)