Я не ожидал следующего код для работы:
foo :: (Num a) => a -> a
foo x = x + x
main = do
print (foo (read "7"))
, потому что невозможно полностью вывести тип (читай «7») на основе кода. Но GHC (6.12.3) думает иначе и выводит 14.
Если «7» изменить на «7.2», код завершится ошибкой «без синтаксического анализа». Что тут происходит? как Haskell решает, какой экземпляр Read использовать?