将元素映射到 Haskell 中的函数列表

Mapping an element to a list of functions in Haskell

Haskell 中的 Prelude 函数 map 将函数应用于输入列表:

map :: (a -> b) -> [a] -> [b]

如果我们想将一个元素应用于函数列表,我们可以通过递归来实现:

functionMap :: a -> [a -> b] -> [b]
functionMap element functions = case functions of
  []   -> []
  x:xs -> x element : functionMap element xs

如果可能的话,我们如何用高阶函数来简化上述递归,例如foldlfoldrmap

您可以 map 覆盖 functions 并将每个应用到 element:

functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map (\f -> f element) functions

这可以使用 $ 运算符缩短为:

functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map ($ element) functions

或者只是:

functionMap :: a -> [a -> b] -> [b]
functionMap element = map ($ element)

(也:functionMap = map . flip id