Respuesta
código Pure puede lanzar asíncrono, imprecise exceptions, por ejemplo, cuando una función parcial encuentros de entrada que tiene ningún caso de manejar.
Estos son errores lógicos, generalmente, que indican errores en la especificación del programa.
Pueden estar atrapados en el código IO (generalmente en una capa externa del programa), a través de exception handler.
Por ejemplo, para recuperar el caso que falta para la lista vacía,
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE BangPatterns #-}
import Control.Exception
main = do
handle (\(e :: SomeException) -> print $ "This program as a bug: " ++ show e) $ do
let !v = foldl1 (+) ([] :: [Int])
return()
Podemos observar que se detecta la excepción, y el programa termina.
$ ./A
"This program as a bug: Prelude.foldl1: empty list"
Creo que el programa también es un error en su excepción andler :-) –
Este programa no es un conducto. –
Este intercambio me ha proporcionado mucha satisfacción. – sclv
All you need to know about haskell exceptions (de una forma fácil lectura :)
purista respuesta: el resultado es indefinido (específicamente, bottom). No puede hacer nada con eso, excepto que falla si el valor se usa de alguna forma para generar los resultados del programa. Ver Haskell 98 Report section 3.1. Especifica que tales "errores causan la terminación inmediata del programa y no pueden ser capturados por el usuario".
Lo mejor es comprobar los valores de entrada y manejarlos ANTES de que puedan llegar tan lejos. No use fold1 si la lista puede tener 0 elementos.
Sin embargo, en la práctica, puede usar los métodos en las otras respuestas para capturarlo en IO cuando usa GHC. Las excepciones no pueden capturarse en código puro (no IO) porque elevar una excepción es un cambio en el flujo de control es un efecto secundario, no un cálculo puro.
- 1. XMLHttpRequest.open() el manejo de excepciones
- 2. El manejo de excepciones no funciona con Qt en Windows
- 3. BackgroundWorker manejo de excepciones
- 4. Wcf manejo de excepciones
- 5. Manejo de excepciones JSF2
- 6. Manejo de excepciones AOP
- 7. Manejo de múltiples excepciones
- 8. Haskell "excepciones"
- 9. manejo de excepciones ofstream
- 10. manejo en Haskell
- 11. Manejo de excepciones en el servicio RIA
- 12. El manejo de excepciones en PL/SQL
- 13. Robusto manejo de excepciones Javascript
- 14. Python solicita manejo de excepciones
- 15. Manejo de excepciones en linux
- 16. Manejo de excepciones de nodo
- 17. Patrón de manejo de excepciones
- 18. Python httplib2 Manejo de excepciones
- 19. Python: Queue.Empty manejo de excepciones
- 20. manejo de excepciones en C#
- 21. Manejo de excepciones en hilos
- 22. ASP.NET MVC manejo de excepciones
- 23. Manejo de excepciones para ThreadPoolExecutor
- 24. Excepciones puras en Haskell
- 25. ¿Cómo implementar el manejo de excepciones de nivel superior?
- 26. ¿Cómo puedo desactivar el manejo de excepciones en MSVC?
- 27. Cómo usar interfaces en el manejo de excepciones
- 28. ¿Cómo escribo el manejo de excepciones para entradas incorrectas?
- 29. Manejo de eventos en Haskell
- 30. Mostrar el número de línea en el manejo de excepciones
Ver también http://stackoverflow.com/questions/3642793/why-can-haskell-exceptions-only-be-caught-inside-the-io-monad –
Realmente no importa, es solo una cuestión de tiempo antes de que la biblioteca de fallas seguras tome el control del mundo ;-). –
¿Qué biblioteca de fallas seguras? – qrest