module Agda.Compiler.MAlonzo.Primitives where
import Control.Monad.Reader
import Control.Monad.State
import Data.Char
import Data.List as L
import Data.Map as M
import qualified Language.Haskell.Exts.Syntax as HS
import Agda.Compiler.MAlonzo.Compiler (term)
import Agda.Compiler.MAlonzo.Misc
import Agda.Compiler.MAlonzo.Pretty
import Agda.Syntax.Common
data DefInfo =
DefInfo { defFixity :: Fixity'
, defAccess :: Access
, defAbstract :: IsAbstract
, defInfo :: DeclInfo
}
deriving (Typeable, Data, Show)
mkDefInfo :: Name -> Fixity' -> Access -> IsAbstract -> Range -> DefInfo
mkDefInfo x f a ab r = DefInfo f a ab (DeclInfo x r)
instance HasRange DefInfo where
getRange = getRange . defInfo
instance KillRange DefInfo where
killRange i = i { defInfo = killRange $ defInfo i }
data DeclInfo =
DeclInfo { declName :: Name
, declRange :: Range
}
deriving (Typeable, Data, Show)
instance HasRange DeclInfo where
getRange = declRange
instance KillRange DeclInfo where
killRange i = i { declRange = killRange $ declRange i }
newtype LHSInfo = LHSRange Range
deriving (Typeable, Data, Show)
instance HasRange LHSInfo where
getRange (LHSRange r) = r
instance KillRange LHSInfo where
killRange (LHSRange r) = LHSRange (killRange r)
data PatInfo = PatRange Range
| PatSource Range (Precedence -> Pattern)
deriving (Typeable, Data)
instance Show PatInfo where
show (PatRange r) = "PatRange " ++ show r
show (PatSource r _) = "PatSource " ++ show r
instance HasRange PatInfo where
getRange (PatRange r) = r
getRange (PatSource r _) = r
instance KillRange PatInfo where
killRange (PatRange r) = PatRange $ killRange r
killRange (PatSource r f) = PatSource (killRange r) f