2016-04-09 3 views
0

Я начал изучать Haskell несколько дней назад, и теперь я изучаю типы функций.Haskell Простая функция определения

Использование кортежей, под кодом работает.

add1 :: (Int,Int) -> Int 
add1(x,y) = x + y 

Но что делать, если я хочу сделать ту же функцию без использования кортежей?

Я пробовал оба определения функции

add2 :: Int, Int -> Int 
add2 :: Int Int -> Int 

с

add2 a b = a + b 

Но эти два определения функции не компилировать. Что я делаю не так?

ответ

3

Ваш тип должен быть

add2 :: Int -> Int -> Int 

Добавление скобок покажет вам, что на самом деле означает этот тип.

add2 :: Int -> (Int -> Int) 

Итак, add2 это функция, которая принимает Int и возвращает другую функцию (тип Int -> Int). Вы можете использовать это следующим образом

add2 1 -- this returns a function, type Int -> Int 

или добавить второй параметр, чтобы получить окончательный Int из

(add2 1) 2 --same as "add2 1 2", returns an Int value 1+2=3 
Смежные вопросы