Por que a definição de função para todos os tipos de uma só vez não é permitida em Haskell?
Esta é provavelmente uma questão muito básica, mas ...
Uma função que é definida como, digamos
foo :: a -> Integer
denota uma função dequalquer digite um inteiro. Se assim for, então, em teoria, um deve ser capaz de defini-lo para qualquer tipo, como assim
foo 1 = 10
foo 5.3 = 100
foo (x:xs) = -1
foo _ = 0
Mas Haskell só permite uma definição geral, comofoo a = 0
.
E mesmo se você restringira
para ser um de uma determinada classe de tipos, como uma instância da classe Show:
foo :: (Show a) => a -> Integer
você ainda não pode fazer algo como
foo "hello" = 10
foo _ = 0
Apesar de"hello" :: [Char]
é uma instância deShow
Por que existe tal restrição?