Le 13/09/07, Dupont Corentin
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@irc.freenode.net). -- Jedaï