[Haskell-fr] Fractional etc...

Chaddaï Fouché chaddai.fouche at gmail.com
Mon Oct 29 07:44:44 EDT 2007


Le 29/10/07, Dupont Corentin<corentin.dupont at gmail.com> a écrit :
>
> let m = 5
> map (/m) [0..10]
>
> il me sort:
>     No instance for (Fractional Integer)
>       arising from use of `/' at <interactive>:1:4-7
>     Possible fix: add an instance declaration for (Fractional Integer)
>     In the first argument of `map', namely `(/ m)'
>     In the expression: map ((/ m)) ([0 .. 10])
>     In the definition of `it': it = map ((/ m)) ([0 .. 10])
>

C'est normal, car GHCi est obligé de typer 5 sans autres informations,
il lui donne donc le type par défaut pour un littéral entier :
Integer. Comme ensuite tu utilises (/) qui ne prend pas un Integer
comme opérande...

Par contraste :
map (/5) [0..10]
Là, GHCi a plus d'information sur le typage de 5, il sait qu'il doit
s'agir d'un Fractional, il lui donne donc le type Fractional par
défaut, c'est à dire Double.

Dans un véritable programme, ce problème n'apparaît pas, car GHC
dispose toujours de meilleures contraintes de typage (ou la variable
n'est pas utilisée). Il n'y a pas vraiment de remède au problème,
excepté de mettre un devin dans GHCi, ou peut-être de retarder la
compilation des lets... (mais jusqu'à quand ?)

-- 
Jedaï


More information about the Haskell-fr mailing list