Let\'s say I have a list of functions
functions = [f, g, h]
each one with type a -> a
I also have a list of values
Here's another option which might make you think a bit.
>>> import Control.Applicative
>>> let functions = ZipList [(+1), (*2), (*10)]
>>> let values = ZipList [1, 2, 3]
>>> getZipList (functions <*> values)
[2, 4, 30]
A ZipList
is just a wrapper around a list. The definition of <*>
for a ZipList
says "zip the list of functions (on the left) with the list of arguments (on the right) by applying each function to an argument in turn".
This is in contrast to the definition of <*>
for a regular list, which says "take every possible pair of (function, argument) from these two lists and apply the function to the argument".