Warum ist die gleichzeitige Definition von Funktionen für alle Typen in Haskell nicht zulässig?

Dies ist wahrscheinlich eine sehr grundlegende Frage, aber ...

Eine Funktion, die beispielsweise als definiert ist

foo :: a -> Integer

bezeichnet eine Funktion vonirgendein Geben Sie eine Ganzzahl ein. Wenn ja, dann sollte man es theoretisch für jeden Typ definieren können

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

Aber Haskell erlaubt nur eine allgemeine Definition, wiefoo a = 0.

Und selbst wenn Sie einschränkena Zu einer bestimmten Klasse von Typen gehören, z. B. eine Instanz der Typenklasse Show:

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

Sie können immer noch nicht so etwas tun

foo "hello" = 10
foo   _     = 0

obwohl"hello" :: [Char] ist eine Instanz vonShow

Warum gibt es eine solche Einschränkung?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage