[Haskell-fr] inférence
Eric Y. Kow
eric.kow at gmail.com
Mon Sep 10 08:16:25 EDT 2007
Salut,
> us(m) = map (/m) [0.0..(7-1)*m]
Le (/) ne prend que de types qui sont des instances de la classe
Fractional (e.g. Double, Float). Comme tu as utilisé un / m,
Haskell a inféré que m est forcement dans cette classe. Donc si dans
une autre fonction tu passe un Int à us, il y aura un erreur de typage.
Je crois que les fonctions fromIntegral ou realToFrac pourraient servir
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v%3AfromIntegral
Peut-être ça sera une bonne idée de faire
us(m) = map (/mf) [0.0..(7-1)*m]
where mf = fromInteger m
forum
-----
Il y a #haskell et #haskell.fr sur irc.freenode.net. La communauté
Haskell a plus tendence a utiliser les listes de diffusion ou IRC que
les forums (message boards?) ou Usenet.
style
-----
Je crois que c'est plus courant de faire
us m = ...
sans les parenthèses dans les paramètres
Lorsque mes fonctions sont «externes», c'est à dire, pas cachées dans un
'let' ou un 'where', je préfère exprimer mes intentions explicitement
avec une signature de type. Par exemple,
us :: Int -> [Float]
us m = ...
Ou peut-être tu voulais une fonction plus generale
us :: (Integral a, Fractional b) => a -> [b]
us m = ...
C'est pratique pour comprendre les erreurs de typage, et aussi comme
source de documentation.
--
Eric Kow http://www.loria.fr/~kow
PGP Key ID: 08AC04F9 Merci de corriger mon français.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 186 bytes
Desc: not available
Url : http://www.haskell.org/pipermail/haskell-fr/attachments/20070910/93dfbe44/attachment-0001.bin
More information about the Haskell-fr
mailing list