Недавно я взглянул на Haskell, используя LYAH.
Я возился с типами классов и написал эту функцию быстрого тестирования:
foo :: (Num x) => x -> String
foo x = show x ++ "!"
Но это вызывает эту ошибку:
test.hs:2:9:
Could not deduce (Show x) arising from a use of `show'
from the context (Num x)
bound by the type signature for foo :: Num x => x -> String
at test.hs:1:8-29
Possible fix:
add (Show x) to the context of
the type signature for foo :: Num x => x -> String
Но согласно ЛЯХ:
Чтобы присоединиться к Num, тип должен уже быть знакомым с Show и Eq.
Итак, если все в Num
является подмножеством Show
и Eq
, почему мне нужно изменить подпись типа на foo :: (Num x, Show x) => x -> String
, чтобы это работало? Нельзя ли сделать вывод, что a Num
также является Show-able?