gpt4 book ai didi

haskell - 有类似 `map2::(i -> a) -> (i -> b) -> [i] -> [(a,b)]` 的东西吗?

转载 作者:行者123 更新时间:2023-12-03 01:54:39 24 4
gpt4 key购买 nike

我只是编写了这样的函数,直到 map4 只是因为它们看起来很有用:

map2 :: Functor f => (i -> a) -> (i -> b) -> f i -> f (a,b)
map2 f1 f2 = fmap $ \i -> (f1 i, f2 i)

在继续map8之前,我想我应该问一下某些标准模块中是否有类似的东西。 Hayoo 似乎不知道任何具有上述签名的函数。

注意:我已经找到了 Control.Arrow.&&& ,它将上面的内容简化为:

map2 f1 f2 = fmap (f1 &&& f2)

但是对于超过两个扇出,似乎没有类似的功能。

最佳答案

(->) i 是一个应用仿函数,因此您可以将 (&&&) 写为

f &&& g = (,) <$> f <*> g

你可以将map3写为

map3 f1 f2 f3 = map ((,,) <$> f1 <*> f2 <*> f3)

除了它不短于

map3 f1 f2 f3 = map $ \i -> (f1 i, f2 i, f3 i)

但是多亏了 Gabriel 的提示,这个更短了:

map3 f1 f2 f3 = map (liftA3 (,,) f1 f2 f3)

关于haskell - 有类似 `map2::(i -> a) -> (i -> b) -> [i] -> [(a,b)]` 的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17074424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com