¿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?