Типы: (Num a, Ord a) против (Int a)?

В файле яЯ пытаюсь определить функцию следующим образом:

myReplicate :: (Int a) => a -> b -> [b]  
myReplicate n x  
    | n :l 1.hs 
[1 of 1] Compiling Main             ( 1.hs, interpreted )

1.hs:38:17:
    `Int' is applied to too many type arguments
    In the type signature for `myReplicate':
      myReplicate :: Int a => a -> b -> [b]
Failed, modules loaded: none.

ghci говорит мне, что тип myReplicate должен быть:

ghci>:t myReplicate 
myReplicate :: (Num a, Ord a) => a -> a1 -> [a1]

Если я изменю объявление типа на то, что рекомендует ghci:

myReplicate :: (Num a, Ord a) => a -> b -> [b]

... тогда функция компилируется иработает', Тем не менее, это 'работает' как это:

ghci>myReplicate 3.2 1
[1,1,1,1]

Почему можноt Я заявляю, что myReplicate принимает только Int в качестве первого аргумента (также в свете того факта, что Int происходит от (?) из класса Ord)? Я думаю, я мог бы изменить свой первый охранник, чтобы быть х < 1, так что myReplicate 3.2 1 будет производить [1, 1, 1,], но почему я должен беспокоиться о поплавках?

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

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