Le 29/10/07, Dupont Corentin
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ï