翻转功能有什么作用?

时间:2017-09-02 03:25:25

标签: purescript

我是purescript的新手。这是我正在学习的书Leanpub-purescript。我无法理解翻转功能是什么。这与交换概念类似吗?

> :type flip
forall a b c. (a -> b -> c) -> b -> a -> c

表示a value goes to b, then b to a, then c is itself??。我很震惊。请解释翻转概念,如果我所指的书不好,请提出一些其他材料

1 个答案:

答案 0 :(得分:4)

flip函数反转双参数函数的参数顺序。考虑一个简单的subtract函数:

subtract :: Int -> Int -> Int
subtract a b = a - b

subtract 4 3
-- 4 - 3 = 1

如果在flip函数上调用subtract,则会更改正在减去的数字:

(flip subtract) 4 3
-- 3 - 4 = -1

它也适用于不同参数类型的函数:

showIntAndString :: Int -> String -> String
showIntAndString int string = (show int) <> string

showIntAndString 4 "asdf"
-- "4asdf"

(flip showIntAndString) "asdf" 4
-- "4asdf"

如果对你更有意义,可以尝试将flip视为一个接受双参数函数作为参数的函数,并返回另一个双参数函数:

flip :: forall a b c.
    (a -> b -> c) -- takes a function
    -> (b -> a -> c) -- returns a function with flipped arguments

flip的一个用例是当你想部分应用一个函数时,你要部分应用的参数位于第二位。然后,您可以flip原始函数,并部分应用生成的函数。