Haskell, почему для «Num x» требуется «Show x»?
Недавно я взглянул на Haskell, используяЛях.
Я возился с типами классов и написал эту функцию быстрого теста:
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
чтобы это работало? Разве нельзя сделать вывод, чтоNum
также Show-состоянии?