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?