¿Por qué la definición de función para todos los tipos a la vez no está permitida en Haskell?

Esta es probablemente una pregunta muy básica, pero ...

Una función que se define como, digamos

foo :: a -> Integer

denota una función dealguna escriba a un entero. Si es así, entonces en teoría uno debería ser capaz de definirlo para cualquier tipo, como así

foo 1 = 10
foo 5.3 = 100
foo (x:xs) = -1
foo  _     = 0

Pero Haskell solo permite una definición general, comofoo a = 0.

E incluso si restringesa para ser uno de una cierta clase de tipos, como una instancia de la clase de tipos Show:

foo :: (Show a) => a -> Integer

todavía no puedes hacer algo como

foo "hello" = 10
foo   _     = 0

aunque"hello" :: [Char] es una instancia deShow

¿Por qué hay tal restricción?

Respuestas a la pregunta(5)

Su respuesta a la pregunta