{-# LANGUAGE UndecidableInstances #-}
module Agda.Unused.Monad.Error
  ( 
    
    Error(..)
  , InternalError(..)
  , UnexpectedError(..)
  , UnsupportedError(..)
    
  , liftLookup
  ) where
import Agda.Unused.Types.Context
  (LookupError(..))
import Agda.Unused.Types.Name
  (QName)
import Agda.Interaction.FindFile
  (FindError)
import Agda.Syntax.Concrete.Definitions
  (DeclarationException)
import Agda.Syntax.Concrete.Fixity
  (MonadFixityError(..))
import Agda.Syntax.Parser
  (ParseError)
import Agda.Syntax.Position
  (Range, getRange)
import Control.Monad.Except
  (MonadError, throwError)
data Error where
  
  ErrorAmbiguous
    :: !Range
    -> !QName
    -> Error
  
  ErrorCyclic
    :: !Range
    -> !QName
    -> Error
  
  ErrorDeclaration
    :: !DeclarationException
    -> Error
  
  ErrorFile
    :: !FilePath
    -> Error
  
  ErrorFind
    :: !Range
    -> !QName
    -> !FindError
    -> Error
  
  ErrorFixity
    :: !(Maybe Range)
    -> Error
  
  ErrorGlobal
    :: !Range
    -> Error
  
  ErrorInclude
    :: Error
  
  ErrorInternal
    :: !InternalError
    -> Error
  
  ErrorOpen
    :: !Range
    -> !QName
    -> Error
  
  ErrorParse
    :: !ParseError
    -> Error
  
  
  ErrorPolarity
    :: !(Maybe Range)
    -> Error
  
  ErrorRoot
    :: !QName
    -> !QName
    -> Error
  
  ErrorUnsupported
    :: !UnsupportedError
    -> !Range
    -> Error
data InternalError where
  
  ErrorConstructor
    :: !Range
    -> InternalError
  
  ErrorMacro
    :: !Range
    -> InternalError
  
  ErrorModuleName
    :: !FilePath
    -> InternalError
  
  ErrorName
    :: !Range
    -> InternalError
  
  ErrorRenaming
    :: !Range
    -> InternalError
  
  ErrorUnexpected
    :: !UnexpectedError
    -> !Range
    -> InternalError
  deriving Int -> InternalError -> ShowS
[InternalError] -> ShowS
InternalError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [InternalError] -> ShowS
$cshowList :: [InternalError] -> ShowS
show :: InternalError -> String
$cshow :: InternalError -> String
showsPrec :: Int -> InternalError -> ShowS
$cshowsPrec :: Int -> InternalError -> ShowS
Show
data UnexpectedError where
  UnexpectedAbsurd
    :: UnexpectedError
  UnexpectedAs
    :: UnexpectedError
  UnexpectedDontCare
    :: UnexpectedError
  UnexpectedETel
    :: UnexpectedError
  UnexpectedEllipsis
    :: UnexpectedError
  UnexpectedEqual
    :: UnexpectedError
  UnexpectedField
    :: UnexpectedError
  UnexpectedNiceFunClause
    :: UnexpectedError
  UnexpectedOpApp
    :: UnexpectedError
  UnexpectedOpAppP
    :: UnexpectedError
  deriving Int -> UnexpectedError -> ShowS
[UnexpectedError] -> ShowS
UnexpectedError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UnexpectedError] -> ShowS
$cshowList :: [UnexpectedError] -> ShowS
show :: UnexpectedError -> String
$cshow :: UnexpectedError -> String
showsPrec :: Int -> UnexpectedError -> ShowS
$cshowsPrec :: Int -> UnexpectedError -> ShowS
Show
data UnsupportedError where
  
  UnsupportedLoneConstructor
    :: UnsupportedError
  
  UnsupportedMacro
    :: UnsupportedError
  
  UnsupportedUnquote
    :: UnsupportedError
  deriving Int -> UnsupportedError -> ShowS
[UnsupportedError] -> ShowS
UnsupportedError -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UnsupportedError] -> ShowS
$cshowList :: [UnsupportedError] -> ShowS
show :: UnsupportedError -> String
$cshow :: UnsupportedError -> String
showsPrec :: Int -> UnsupportedError -> ShowS
$cshowsPrec :: Int -> UnsupportedError -> ShowS
Show
instance (Monad m, MonadError Error m) => MonadFixityError m where
  throwMultipleFixityDecls :: forall a. [(Name, [Fixity'])] -> m a
throwMultipleFixityDecls []
    = forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (Maybe Range -> Error
ErrorFixity forall a. Maybe a
Nothing)
  throwMultipleFixityDecls ((Name
n, [Fixity']
_) : [(Name, [Fixity'])]
_)
    = forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (Maybe Range -> Error
ErrorFixity (forall a. a -> Maybe a
Just (forall a. HasRange a => a -> Range
getRange Name
n)))
  throwMultiplePolarityPragmas :: forall a. [Name] -> m a
throwMultiplePolarityPragmas []
    = forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (Maybe Range -> Error
ErrorPolarity forall a. Maybe a
Nothing)
  throwMultiplePolarityPragmas (Name
n : [Name]
_)
    = forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (Maybe Range -> Error
ErrorPolarity (forall a. a -> Maybe a
Just (forall a. HasRange a => a -> Range
getRange Name
n)))
  warnUnknownNamesInFixityDecl :: HasCallStack => [Name] -> m ()
warnUnknownNamesInFixityDecl [Name]
_
    = forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
  warnUnknownNamesInPolarityPragmas :: HasCallStack => [Name] -> m ()
warnUnknownNamesInPolarityPragmas [Name]
_
    = forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
  warnUnknownFixityInMixfixDecl :: HasCallStack => [Name] -> m ()
warnUnknownFixityInMixfixDecl [Name]
_
    = forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
  warnPolarityPragmasButNotPostulates :: HasCallStack => [Name] -> m ()
warnPolarityPragmasButNotPostulates [Name]
_
    = forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
liftLookup
  :: MonadError Error m
  => Range
  -> QName
  -> Either LookupError a
  -> m a
liftLookup :: forall (m :: * -> *) a.
MonadError Error m =>
Range -> QName -> Either LookupError a -> m a
liftLookup Range
r QName
n (Left LookupError
LookupNotFound)
  = forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (Range -> QName -> Error
ErrorOpen Range
r QName
n)
liftLookup Range
r QName
n (Left LookupError
LookupAmbiguous)
  = forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (Range -> QName -> Error
ErrorAmbiguous Range
r QName
n)
liftLookup Range
_ QName
_ (Right a
x)
  = forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x