带有 map 的一个参数上的多个函数

Die*_*row 1 haskell function

是否可以编写一个简单的 map 函数,它允许在一个参数上具有多个函数?例如mapmultiple [square, pred] 4 --> [16, 3]

map1 :: (a -> b) -> [a] -> [b]
map1 f [] = []
map1 f (x:xs) = foldr (\y ys -> (f y):ys) [] xs
Run Code Online (Sandbox Code Playgroud)

map1 允许它使用一个函数,但是它如何使用两个或三个函数?

Sil*_*olo 5

这只是map颠倒了论点。

map :: (a -> b) -> [a] -> [b]
mapmultiple :: [a -> b] -> a -> [b]
Run Code Online (Sandbox Code Playgroud)

的“函数”map将是一个应用参数的高阶函数。

mapmultiple fs x = map ($ x) fs
Run Code Online (Sandbox Code Playgroud)

如果您对该$部分不满意,这相当于[1]

mapmultiple fs x = map (\f -> f x) fs
Run Code Online (Sandbox Code Playgroud)

[1]有一段时间,有一个 GHC 错误,其中部分会错误地编译为类似(但不完全等效)的代码。我不确定它是否已修复。它不应该在这里相关,但我想我应该提到它。