La gestion des exceptions en Haskell

J'ai besoin d'aide pour comprendre l'utilisation des trois Haskell fonctions

  • essayer (Control.Exception.try :: Exception e => IO a -> IO (Either e a))
  • catch (Control.Exception.catch :: Exception e => IO a -> (e -> IO a) -> IO a)
  • la poignée (Control.Exception.handle :: Exception e => (e -> IO a) -> IO a -> IO a)

J'ai besoin de savoir plusieurs choses:

  1. Quand dois-je utiliser la fonction?
  2. Comment puis-je utiliser cette fonction avec un simple exemple?
  3. Où est la différence entre la capture et la poignée? Ils ont presque la même signature qu'avec un ordre différent.

Je vais essayer d'écrire mes essais et j'espère que vous pourrez m'aider:

essayer

J'ai un exemple comme:

x = 5 `div` 0
test = try (print x) :: IO (Either SomeException ())

J'ai deux questions:

  1. Comment puis-je personnaliser la sortie d'erreur?

  2. Que puis-je faire pour mettre toutes les erreurs à SomeException donc je ne doit écrire le :: IO (Either SomeException())

catch/essayer

Pouvez-vous me montrer un petit exemple avec un message d'erreur personnalisé de sortie?

InformationsquelleAutor develhevel | 2011-05-15