При написании этого я перепутал карри и не спеша. Это обратные преобразования функций. На самом деле не имеет значения, что вы называете, что, пока вы получаете то, что представляет преобразование и его обратное.
Непостоянство не очень четко определено (или, скорее, существуют «противоречивые» определения, которые все отражают дух идеи). По сути, это означает превращение функции, которая принимает несколько аргументов, в функцию, которая принимает один аргумент. Например,
(+) :: Int -> Int -> Int
Теперь, как вы превращаете это в функцию, которая принимает один аргумент? Вы обманываете, конечно!
plus :: (Int, Int) -> Int
Обратите внимание, что плюс теперь принимает один аргумент (который состоит из двух вещей). Супер!
Какой смысл в этом? Что ж, если у вас есть функция, которая принимает два аргумента, и у вас есть пара аргументов, приятно знать, что вы можете применить функцию к аргументам и при этом получить то, что ожидаете. И на самом деле, сантехника для этого уже существует, так что вам не нужно делать такие вещи, как явное сопоставление с образцом. Все, что вам нужно сделать, это:
(uncurry (+)) (1,2)
Так что же такое частичное применение функции? Это другой способ превратить функцию с двумя аргументами в функцию с одним аргументом. Это работает по-другому, хотя. Опять же, давайте возьмем (+) в качестве примера. Как мы можем превратить его в функцию, которая принимает один Int в качестве аргумента? Мы обманываем!
((+) 0) :: Int -> Int
Это функция, которая добавляет ноль к любому Int.
((+) 1) :: Int -> Int
добавляет 1 к любому Int. И т. Д. В каждом из этих случаев (+) «частично применяется».