The Prelude function map in Haskell applies a function to a list of inputs:
map :: (a -> b) -> [a] -> [b]
If we would like to apply an element to a list of functions, we could do this with recursion:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = case functions of
[] -> []
x:xs -> x element : functionMap element xs
How could we simplify the above recursion with higher order functions, such as foldl, foldr or map, if it is possible?
CodePudding user response:
You can map over the functions and apply each to element:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map (\f -> f element) functions
This can be shortened using the $ operator to:
functionMap :: a -> [a -> b] -> [b]
functionMap element functions = map ($ element) functions
or just:
functionMap :: a -> [a -> b] -> [b]
functionMap element = map ($ element)
(also: functionMap = map . flip id)
