Dlaczego definicja funkcji dla wszystkich typów jednocześnie nie jest dozwolona w Haskell?

To jest prawdopodobnie bardzo podstawowe pytanie, ale ...

Funkcja zdefiniowana jako powiedzmy

foo :: a -> Integer

oznacza funkcję zkażdy wpisz do liczby całkowitej. Jeśli tak, to teoretycznie powinno być możliwe zdefiniowanie go dla dowolnego typu, tak

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

Ale Haskell pozwala tylko na ogólną definicjęfoo a = 0.

A nawet jeśli ograniczysza być jednym z pewnej klasy typów, na przykład instancji klasy Show:

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

nadal nie możesz zrobić czegoś takiego

foo "hello" = 10
foo   _     = 0

nawet jeśli"hello" :: [Char] jest przykłademShow

Dlaczego istnieje takie ograniczenie?

questionAnswers(5)

yourAnswerToTheQuestion