Haskell function composition

后端 未结 6 1488
梦如初夏
梦如初夏 2021-02-01 14:42

I am reading this tutorial on Haskell. They define function composition as the following:

(.)                     :: (b->c) -> (a->b) -> (a-         


        
6条回答
  •  遥遥无期
    2021-02-01 15:23

    Function composition is a way to chain two or more functions together. It's often likened to shell piping. For example, in a Unix-style shell, you might write something like

    cat foo.txt | sort -n | less
    

    This runs cat, feeds its output to sort, and feeds the output from that to less.

    Strictly, this is like the Haskell $ operator. You might write something like

    sum $ sort $ filter (> 0) $ my_list
    

    Notice that, unlike the shell example, this reads from right to left. So we start with my_list as input, then we run filter over it, then we sort it, and then we calculate the sum of it.

    The function composition operator, ., does something similar. The example above produces a number; the example below produces a function:

    sum . sort . filter (> 0)
    

    Notice that we didn't actually feed a list into this. Instead, we've just created a new function, and we can feed several different lists to that function. For example, you might name this function:

    my_function = sum . sort . filter (> 0)
    

    Or you might pass it as an argument to another function:

    map (sum . sort . filter (> 0)) my_lists
    

    You can basically use it anywhere that you can use any other sort of function. It's just a quick and readable way of saying "I want to chain these functions together".

提交回复
热议问题