Tipos: (Num a, Ord a) versus (Int a)?

En un archivo, estoy tratando de definir una función como esta:

myReplicate :: (Int a) => a -> b -> [b]  
myReplicate n x  
    | n <= 0    = []  
    | otherwise = x : myReplicate (n-1) x  

Comprar cuando intento cargar el archivo en ghci, me sale este error:

ghci>: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 me dice que el tipo de myReplicate debería ser:

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

Si cambio la declaración de tipo a lo que ghci recomienda:

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

... entonces la función compila y 'trabaja'. Sin embargo, 'funciona' así:

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

¿Por qué no puedo declarar que myReplicate solo toma un Int como primer argumento (también a la luz del hecho de que Int desciende (?) De la clase Ord)? Supongo que podría cambiar mi primer protector para ser x <1, de modo que myReplicate 3.2 1 produciría [1, 1, 1,], pero ¿por qué tengo que molestarme con flotadores?

Respuestas a la pregunta(1)

Su respuesta a la pregunta