Function application function in Haskell

前端 未结 3 803
说谎
说谎 2020-12-20 18:28

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

3条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-20 18:57

    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".

提交回复
热议问题