Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Haskell автоматически выполняет каррирование всех функций, принимающих более одного параметра.Скорее, программист обычно выполняет каррирование всех функций, принимающих более одного параметра. Но можно и не выполнять. Так, функция, принимающая кортеж — это тоже, в некотором роде, функция нескольких параметров — при этом определение такой функции ничуть не сложнее определения каррированной функции.
add1 a b = a+b
add2 (a, b) = a+b
map (uncurry (+)) xs превращает список пар в список их сумм.В Haskell функции без параметров называются константными функциями, поскольку каждая из них всегда возвращает одно и то же значение.
М. Липовача «Изучай Haskell во имя добра!», стр. 28:
Когда функция не принимает аргументов, говорят, что это константная функция.
М. Липовача «Изучай Haskell во имя добра!», стр 159:
Примечание. Мы называем тип конкретным, если он вообще не принимает параметров (например Int или Bool) либо если параметры в типе заполнены (например, Maybe Char). Если у вас есть какое-то значение, у него всегда конкретный тип.
Maybe (a -> b) -- == Maybe ((->) a b)
a -> Maybe b -- == (->) a (Maybe b)
pi :: Double
pi = 3.14 // вещественная константа
printHello :: IO ()
printHello = putStrLn "Hello" // константа - IO-действие
countEven :: Integral a => [a] -> Int
countEven = length . filter even
func :: (Num a) => a -> a -> a -> a
func a b c d = a + b + c + d
Немного о каррировании в Haskell