Почему сумма xy имеет тип (Num a) => a -> a -> a в Haskell?

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

Допустим, я определяю функцию sum :

let sum x y = x + y

если я запрашиваю Haskell для ее типа

:t sum

, я получаю

sum :: (Num a) => a -> a -> a
  1. Что это означает, => оператор? Это как-то связано с лямбда-выражениями? Вот как сигнализирует, что то, что следует за оператором => , в C # является одним.
  2. Что означает a -> a -> a ? При визуальном осмотре ряда различных функций, которые я пробовал, кажется, что начальные a -> a являются аргументами, а окончательные -> a являются результатом функция суммы. Если это верно, то почему бы не что-то вроде (a, a) -> a , что кажется более интуитивным?
10
задан Don Stewart 22 April 2011 в 21:58
поделиться