Почему определение функций для всех типов одновременно не разрешено в Haskell?
Это, наверное, очень простой вопрос, но ...
Функция, которая определена как, скажем,
foo :: a -> Integer
обозначает функцию изany введите целое число. Если это так, то в теории можно определить его для любого типа, например
foo 1 = 10
foo 5.3 = 100
foo (x:xs) = -1
foo _ = 0
Но Haskell позволяет только общее определение, какfoo a = 0
.
И даже если вы ограничиваетеa
быть одним из определенного класса типов, например экземпляра класса типов Show:
foo :: (Show a) => a -> Integer
Вы все еще не можете сделать что-то вроде
foo "hello" = 10
foo _ = 0
даже если"hello" :: [Char]
является примеромShow
Почему существует такое ограничение?