Типы: (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,], но почему я должен беспокоиться о поплавках?