Haskell:
Gestion des erreurs

Comment faire :

Haskell gère les erreurs de manière robuste grâce à des types comme Maybe et Either. Voici un aperçu rapide :

safeDivide :: Integral a => a -> a -> Maybe a
safeDivide _ 0 = Nothing  -- Diviser par zéro est interdit, donc on retourne Nothing.
safeDivide x y = Just (x `div` y)  -- Autrement, tout va bien, on retourne le résultat dans un Just.

-- Voyons-le en action :
example1 :: Maybe Int
example1 = safeDivide 10 2  -- Just 5

example2 :: Maybe Int
example2 = safeDivide 10 0  -- Nothing

Pour une gestion d’erreurs plus complexe, Either entre en jeu :

safeDivideEither :: Integral a => a -> a -> Either String a
safeDivideEither _ 0 = Left "Erreur de division par zéro."  -- Cette fois, l'erreur comporte un message.
safeDivideEither x y = Right (x `div` y)

-- Et à l'utilisation :
example3 :: Either String Int
example3 = safeDivideEither 10 2  -- Right 5

example4 :: Either String Int
example4 = safeDivideEither 10 0  -- Left "Erreur de division par zéro."

Plongée Profonde

Dans le monde de Haskell, la gestion des erreurs a une longue histoire. Autrefois, des erreurs pouvaient faire s’écrouler tout votre programme—pas amusant. Le système de types de Haskell offre des moyens de rendre cela beaucoup moins probable. Nous avons Maybe et Either, mais il existe d’autres solutions comme Exceptions et IO pour différents scénarios.

Maybe est simple : on obtient Just quelque chose si tout va bien, ou Nothing si ce n’est pas le cas. Either monte d’un cran, vous permettant de retourner un message d’erreur (Left) ou un résultat réussi (Right).

Les deux sont purs, cela signifie qu’ils ne perturbent pas le monde extérieur – un gros avantage dans Haskell. On évite les pièges des exceptions non contrôlées qui affligent certains autres langages.

Pour ceux qui ne se contentent pas de Maybe et Either, des bibliothèques comme Control.Exception offrent une gestion des erreurs plus traditionnelle et impérative à travers des exceptions. Mais leur utilisation trop libérale peut compliquer les choses, donc la communauté s’en tient souvent aux types.

Voir Aussi

Approfondissez avec :