Почему определение функций для всех типов одновременно не разрешено в 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

Почему существует такое ограничение?

Ответы на вопрос(5)

Ваш ответ на вопрос