Question

Le code suivant compile très bien, mais je ne peux pas utiliser ma fonction:

CODE:

g :: (Fractional b, Integral b) => Int -> b -> b
g 1 x = x / (g 2 x + 1)
g 100 x = 2401*x/100
g n x = ((map (\z -> (ceiling z)^2) (1:[0.5,1..]))!!(n-1))*x / ((g (n+1) x) + fromIntegral n)

ERREUR:

Ambiguous type variable `t' in the constraints:
`Integral t' arising from a use of `g' at <interactive>:1:0-6
`Fractional t' arising from a use of `g' at <interactive>:1:0-6
Probable fix: add a type signature that fixes these type variable(s)

Pourquoi est-ce qui se passe, et comment puis-je travailler autour de cela? Je suis en cours d'exécution sous Windows GHC 6.10.4, si cela est du tout pertinent.

Je l'ai déjà pris un coup d'œil à ce lié question , mais ne pas pense qu'il répond à mes besoins.

Était-ce utile?

La solution

Je ne suis pas tout à fait sûr de ce que la fonction est censé faire, mais votre problème semble être que vous utilisez plafond , qui est de type

(RealFrac a, Integral b) => a -> b

Cela force tout le résultat d'être dans la classe intégrale, ce qui est sans doute pas ce que vous voulez. Ajout d'un fromIntegral et changeant ainsi la dernière ligne

g n x = ((map (\z -> (fromIntegral $ ceiling z)^2) (1:[0.5,1..]))!!(n-1))*x / ((g (n+1) x) + fromIntegral n)

Makes la compilation de la fonction et il donne le type

g :: (Fractional b) => Int -> b -> b
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top