Почему Haskell по умолчанию читает Int при чтении Num?

Я не ожидал следующего код для работы:

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 использовать?

8
задан Owen 28 May 2011 в 23:41
поделиться