2012-09-24 10 views
8

DynamicException e throwDyn e throwDynTo erano nel modulo Control.OldException. Ora che OldException è andato per sempre, i pacchetti che si basavano su di esso sono rotti.Qual è l'equivalente di DynamicException nel mondo post-ghc-7.6.1?

Esiste un equivalente di DynamicException nel pacchetto ExtensibleException o altrove? Mi piacerebbe farla franca con cambiamenti minimi.

Contesto: Sto provando a costruire lambdabot con GHC 7.6.1. Il file danneggiato è Signal.hs in lambdabot-utils.

Aggiornamento Esiste qualche tipo di guida per il porting del vecchio codice di eccezioni alle nuove eccezioni estendibili? lambdabot utilizza OldException in diversi punti, una soluzione rapida non sembra possibile.

+0

Perché non solo "Control.Exception'? Supporta eccezioni tipizzate arbitrariamente come dati. – dflemstr

risposta

8

Gli equivalenti di queste funzioni nella nuova Control.Exception sono semplicemente throw, throwTo e catch, come Control.Exception supporta eccezioni dinamici per impostazione predefinita.

La differenza principale tra la vecchia interfaccia e la nuova è che queste funzioni hanno un vincolo Exception anziché Typeable. Tuttavia, nella maggior parte dei casi l'implementazione predefinita è abbastanza buona, quindi è sufficiente dichiarare le istanze Exception per i tipi che si desidera utilizzare, ad es.

instance Exception Foo 
+0

Grazie, semplice 'throwTo' funziona. Non ho mai usato eccezioni prima quindi sono un po 'perso qui. Per esempio. Cosa fare con il vecchio datatype 'Exception'? –

+1

@ n.m. Fondamentalmente, ogni costruttore del vecchio tipo 'Exception' ora corrisponde a un tipo separato e tutte le eccezioni vengono catturate dinamicamente. Ho scritto [una risposta sulla nuova interfaccia delle eccezioni] (http://stackoverflow.com/questions/6009384/exception-handling-in-haskell) che potrebbe esserti utile. – hammar

+0

Grazie, ci provo! –

Problemi correlati