【发布时间】:2015-11-24 11:31:52
【问题描述】:
我想要一个函数
foo :: (a → b → c) → [a] → [b] → [[c]]
接受一个函数 f :: a → b → c 和两个列表 xs 和 ys 并返回一个网格(即列表列表),其中包含应用于 xs 和 @ 的每个值组合的 f 的值987654327@.
示例:foo [1..3] [4..6] 应该返回
[[f 1 4,f 1 5,f 1 6],
[f 2 4,f 2 5,f 2 6],
[f 3 4,f 3 5,f 3 6]]
我目前的做法是
foo = traverse . flip . traverse . flip
这可行,但我想知道是否有其他方法或预定义的组合器可以更好地完成(或者甚至可以组合,以便它可以轻松扩展到三元或 n 元函数)
例如:如果我不想要一个结果网格而只是一个结果列表,我可以写f <$> xs <*> ys,它很简洁,使用预定义的组合子,并且显而易见地推广到 n 元函数方式。是否有类似简洁的方式来编写我的组合器?
【问题讨论】:
标签: haskell nested-lists applicative traversable