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?