Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell Stdlib是我的zipWithMap函数的同义词?_Haskell - Fatal编程技术网

Haskell Stdlib是我的zipWithMap函数的同义词?

Haskell Stdlib是我的zipWithMap函数的同义词?,haskell,Haskell,我经常发现自己希望使用以下功能: zipWithMap :: (a -> b) -> [a] -> [(a, b)] zipWithMap f xs = zip xs $ map f xs 以便: zipWithMap (+3) [1..4] = [(1, 4), (2, 5), (3, 6), (4, 7)] 事实上,我发现自己一直在寻找这一点,以至于我担心自己要么是在重新发明轮子,要么是在使用一个非常不适合Haskell的习惯用法,以至于真正的程序员已经离开了它,从而将

我经常发现自己希望使用以下功能:

zipWithMap :: (a -> b) -> [a] -> [(a, b)]
zipWithMap f xs = zip xs $ map f xs
以便:

zipWithMap (+3) [1..4] = [(1, 4), (2, 5), (3, 6), (4, 7)]
事实上,我发现自己一直在寻找这一点,以至于我担心自己要么是在重新发明轮子,要么是在使用一个非常不适合Haskell的习惯用法,以至于真正的程序员已经离开了它,从而将它排除在stdlib之外

,所以我不得不问:有没有更惯用的方法?也许是用箭

zipWithMap f = map $ id &&& f
虽然我不确定这是否比上面(主观上)简单的风格好。

另外:

Data.Tuple.Extra>  map (second (+3) . dupe) [1..4]
[(1,4),(2,5),(3,6),(4,7)]

我认为
map(id&&f)
足够简单和简短,它不需要自己的名字。同意,尽管我个人希望前奏曲包含(等效的)
fanout fgx=(fx,gx)
,这在伯德的作品中经常出现。这将使这个
映射。fanout id
zip-map f
@WillNess虽然我发现应用程序版本比箭头版本更整洁,但我相信它不会优化。@HTNW-hmm,的确如此。太糟糕了,嗯。