【发布时间】:2012-06-04 20:03:01
【问题描述】:
我正在关注函子、应用函子……我不确定如何到达我想要的地方,但我觉得遵循这些类型应该让我更接近。
有没有一种简单的方法来制作仅适用于 2 元组的第一个元素的 map-alike?从Control.Arrow 中提取first 并使用Arrow (->),这可以很好地解决问题:
map . first :: (b -> c) -> [(b, d)] -> [(c, d)]
我唯一担心的是我还没有对箭有真正的直觉,所以如果我继续这样做,我迟早会发现自己陷入困境。另外,这似乎是一个相当方便的案例,不能一概而论。
我能否通过使用仿函数、monad 或其他任何东西获得相同的功能,同时深入了解我想要的东西?我在玩弄
\f -> map (f `on` fst)
类似的想法,但无法实现。
【问题讨论】:
-
如果使用你不理解的抽象让你感到不舒服,那么使用较少抽象的版本
map (\(a, b) -> (f a, b))绝对没有错。 -
感谢所有建议!这真的很有启发性。已接受您投票最多的答案。
-
如果您对
map . first感到不舒服,请查看stackoverflow.com/questions/413930。