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?