[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haskell-fr
Subject:    =?UTF-8?Q?Re:_[Haskell-fr]_Re:_inf=C3=A9rence?=
From:       eric.kow () gmail ! com (Eric Kow)
Date:       2007-09-13 9:10:35
Message-ID: 4a0b969d0709130610w2a71c491oc3f323974d0df4d7 () mail ! gmail ! com
[Download RAW message or body]

On 13/09/2007, Dupont Corentin <corentin.dupont@gmail.com> wrote:
> Personne ne peut me r?pondre sur mon erreur ci-dessous?
> comment caster de Float en Double?

je ne sais pas... peut-?tre realToFrac pour faire une conversion?
l'hierarchie des classes dans
  http://en.wikibooks.org/wiki/Haskell/Class_declarations
pourrait ?tre pertinent

sinon, tu peux aussi changer tes fonctions pour qu'elles acceptent
Double, ou les g?n?raliser:
  blend_un_point :: Float -> (Integer -> Float) -> Integer -> Float
deviendra
  blend_un_point :: (Fractional a) => (Integer -> a) -> Integer -> a

J'ignore la difference entre Fractional, Floating, etc

> J'ai d'autres questions:
> Je n'ai pas tr?s bien compris ce que signifie le '.

o?? de temps en temps, on utilise x' ou foo' comme nom de variable.
j'aime pas trop parce que je trouve le ? ' ? pas tr?s visible, mais
d'autres programmeurs ont l'air d'apprecier

> Je ne comprend pas tr?s bien ce que font des op?rateurs comme &&&:

j'utilise les dessins dans
  http://en.wikibooks.org/wiki/Haskell/Understanding_arrows
pour ?a

une utilisation de (&&&) de simplifier (f x, g x) en (f &&& g) x

par abus de typage, on pourrait dire que
(&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c'))
c'est ? dire que (&&&) peut prend deux fonctions f et g; et un
param?tre x, il appliquera f et g ? x, et renovera le r?sultat dans un
tuple.

mais en fait, c'est en plus g?neral que ?a

> (&&&) :: (Arrow a) => a b c -> a b c' -> a b (c, c')
> Dans la signature, que signifient les espaces entre les a,b,c...?

Je sais pas comment ?a s'appelle, mais tu as peut-?tre vu que il exist
des types qui prennent des param?tres.  Par exemple Maybe prend un
variable a; donc si je donne Int au type Maybe, j'aurai le type Maybe
Int.  Either est un autre exemple, il prend deux parametr?s.  Ainsi,
Either Int Float  est un type.  Par fois on ?crit des fonctions qui
marche avec des variables de types.  Par exemple, la fonction
  fromMaybe :: a -> Maybe a -> a
marche pour tous les param?tres qu'on peut donner au type Maybe

Dans Haskell, tu peux ?crire qqc encore plus general.  Comparons

  fromMaybe :: a -> Maybe a -> a
  fromBlah :: (Blah x) => a -> x a -> a

fromBlah marche pas seulement avec Maybe, mais avec tous les types ?x?
qui sont des instances de la class Blah.  De fa?on similaire,
  (&&&) :: a b c -> a b c' -> a b (c,c')
(&&&) marche pour les types ?a? qui sont des instances d'Arrow, pas
que pour les fonctions ((->) est un instance de Arrow parmi d'autres)

On peut voir que la signature abusive que j'ai donn? est similaire ?
la signature ci-dessus en la r?ecrivant:

(&&&) :: (b -> c) -> (b -> c') -> (b -> (c, c'))
(&&&) :: ((->) b c) -> ((->) b c') -> ((->) b (c, c'))
(&&&) :: ((a) b c) -> ((a) b c') -> ((a) b (c,c')) -- je remplace ? ->
? par ? a ?
(&&&) :: (a b c) -> (a b c') -> (a b (c,c'))
(&&&) :: a b c -> a b c' -> a b (c,c')

Si ?a fait un peu bizzare de remplacer ? -> ? par ? a ?, c'est utile
de se rappeller que les types commes ? , ? sont des types comme des
autres.  C'est juste que l? on utilise un op?rateur pour le nom du
type (comme on utilise (+) au lieu d'une fonction plus)

Donc on pourrait imaginer...

  fst :: (x,y) -> x
  fst :: ((,) x y) -> x
  fstFoo :: (Foo a) => a x y -> x

Ne fait pas trop confiance ? mes propos; je suis loin d'?tre expert,
et j'ai peut-?tre dit des b?tisses, ou utilis? des abus de langage
sans savoir.

-- 
Eric Kow                     http://www.loria.fr/~kow
PGP Key ID: 08AC04F9         Merci de corriger mon fran?ais.

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic