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?

questionAnswers(5)

yourAnswerToTheQuestion