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-состоянии?

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

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