2012-09-24 1 views
8

DynamicException y throwDyn y throwDynTo solía estar en el módulo Control.OldException. Ahora que OldException se ha ido para siempre, los paquetes que dependen de él están rotos.¿Cuál es el equivalente de DynamicException en el mundo post-ghc-7.6.1?

¿Hay un equivalente de DynamicException en el paquete ExtensibleException o en otro lugar? Me gustaría escapar con cambios mínimos.

Contexto: Estoy intentando construir lambdabot con GHC 7.6.1. El archivo roto es Signal.hs en lambdabot-utils.

Actualización ¿Hay algún tipo de guía para trasladar el código de excepciones antiguas a nuevas excepciones extensibles? lambdabot usa OldException en varios lugares, una solución rápida no parece posible.

+0

¿Por qué no simplemente 'Control.Exception'? Admite excepciones escritas arbitrariamente como datos. – dflemstr

Respuesta

8

Los equivalentes de estas funciones en el nuevo Control.Exception son simplemente throw, y throwTocatch, como Control.Exception admite excepciones dinámicas por defecto.

La principal diferencia entre la interfaz anterior y la nueva es que estas funciones tienen una restricción Exception en lugar de Typeable. Sin embargo, en la mayoría de los casos, la implementación predeterminada es lo suficientemente buena, por lo que solo necesita declarar instancias Exception para los tipos que desea usar, p.

instance Exception Foo 
+0

Gracias, el simple 'throwTo' funciona. Nunca he usado excepciones antes, así que estoy algo perdido aquí. P.ej. ¿Qué hacer con el antiguo tipo de datos 'Exception'? –

+1

@ n.m. Básicamente, cada constructor del antiguo tipo 'Excepción' ahora corresponde a un tipo separado y todas las excepciones se captan dinámicamente. Escribí [una respuesta sobre la nueva interfaz de excepción] (http://stackoverflow.com/questions/6009384/exception-handling-in-haskell) que puede ser útil para usted. – hammar

+0

¡Gracias, lo probaré! –

Cuestiones relacionadas