[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