module Agda.Interaction.Exceptions where
import Control.OldException
import Control.Monad.Trans
import System.Exit
import qualified System.IO.UTF8 as UTF8
import Agda.Syntax.Position
import Agda.Syntax.Parser ( ParseError(..) )
import Agda.Syntax.Concrete.Definitions ( DeclarationException(..) )
handleParseException :: (ParseError -> IO a) -> ParseError -> IO a
handleParseException crash e = crash e
handleDeclarationException :: (DeclarationException -> IO a) -> DeclarationException -> IO a
handleDeclarationException crash e = crash e
failOnException :: (Range -> String -> IO a) -> IO a -> IO a
failOnException h m = m `catchDyn` handleParseException handler
`catchDyn` handleDeclarationException handler
where
handler x = h (getRange x) (show x)