Re: [Haskell-fr] Re: inférence

Chaddaï Fouché chaddai.fouche at gmail.com
Thu Sep 13 12:54:22 EDT 2007


Le 13/09/07, Dupont Corentin<corentin.dupont at gmail.com> a écrit :
> J'ai d'autres questions bêtes:
>
> - je n'ai pas trouvé d'opérateur / comme ceci:
> (/) :: a -> a -> Maybe a
>
> Pourtant il me semble que ce serait une bonne utilisation de Maybe
> pour la division par zero?

Ecrit le ? (/) est la division de réels pour l'instant, mais tu peux écrire :
infixl 5 </>
a </> 0 = Nothing
a </> b = Just $ a / b

Et </> deviendra ta division "sûre" dont tu parlais.


> Egalement je ne comprend pas pourquoi on appel ça la monade Maybe.
> Pour moi une monade c'est une encapsulation d'une suite d'opérations
> impératives...
> Or là je vois le Maybe comme un sorte d'algèbre sur les types:
> Maybe a c'est la "somme" de 2 types: "a" ou "rien".

Tout à fait, Maybe a est un type somme Just a | Nothing, néanmoins
Maybe est un instance de Monad parce que on peut donner un sens aux
opérations monadiques sur le type Maybe (en fait plusieurs, mais celui
qui a été choisi c'est :) :
Nothing >>= f = Nothing
Just a >>= f = f a
return a = Just a

Qui est assez pratique pour enchaîner un tas d'opération susceptible
d'échouer sans devoir gérer soi-même les Maybe, autrement dit :
addFromMap s1 s2 m = do
  a <- lookup s1 m
  b <- lookup s2 m
  return a + b

renvoie Nothing si s1 ou s2 ne sont pas des clés de la Map m, ou Just
le résultat de l'addition des valeurs correspondantes.
(NB : Grâce à l'évaluation paresseuse et la définition de >>=, la
fonction s'arrête en fait au premier échec et n'évalue pas la suite)

> N'hésitez pas à me dire si je polue la liste, je pose les questions un
> peu comme elles me viennent ;)

Ne t'inquiète pas, tes questions sont les bienvenues, néanmoins tu
obtiendrais sans doute des réponses plus rapides sur IRC
(#haskell at irc.freenode.net).

-- 
Jedaï


More information about the Haskell-fr mailing list