Por que a soma x y é do tipo (Num a) => a -> a -> a em Haskell?

Eu tenho lido sobre Haskell e estou tendo dificuldades para entender como as definições de função são tratadas nessa linguagem.

Digamos que estou definindo umsum função:

let sum x y = x + y

se eu consultar Haskell por seu tipo

:t sum

eu recebo

sum :: (Num a) => a -> a -> a
O que significa o=> operador? Tem algo a ver com expressões lambda? É assim que se sinaliza que o que está seguindo o=> O operador é um, em C #.O que faz oa -> a -> a significar? Pela inspeção dos olhos em várias funções diferentes que venho testando, parece que oa -> a são os argumentos e o final-> a é o resultado da função soma. Se isso está certo, por que não algo como(a, a) -> a, o que parece muito mais intuitivo?

questionAnswers(5)

yourAnswerToTheQuestion