module Language.Haskell.Tools.AST.Base where
import Language.Haskell.Tools.AST.Ann
data Operator dom stage
= BacktickOp { _operatorName :: Ann QualifiedName dom stage }
| NormalOp { _operatorName :: Ann QualifiedName dom stage }
data Name dom stage
= ParenName { _simpleName :: Ann QualifiedName dom stage }
| NormalName { _simpleName :: Ann QualifiedName dom stage }
| ImplicitName { _simpleName :: Ann QualifiedName dom stage }
data QualifiedName dom stage
= QualifiedName { _qualifiers :: AnnList UnqualName dom stage
, _unqualifiedName :: Ann UnqualName dom stage
}
nameFromList :: AnnList UnqualName dom stage -> QualifiedName dom stage
nameFromList (AnnList a xs) | not (null xs)
= QualifiedName (AnnList a (init xs)) (last xs)
nameFromList _ = error "nameFromList: empty list"
data UnqualName dom stage
= UnqualName { _simpleNameStr :: String }
data StringNode dom stage
= StringNode { _stringNodeStr :: String }
data ModuleName dom stage = ModuleName { _moduleNameString :: String }
data DataOrNewtypeKeyword dom stage
= DataKeyword
| NewtypeKeyword
data DoKind dom stage
= DoKeyword
| MDoKeyword
data TypeKeyword dom stage = TypeKeyword
data OverlapPragma dom stage
= EnableOverlap
| DisableOverlap
| Overlappable
| Overlapping
| Overlaps
| IncoherentOverlap
data CallConv dom stage
= StdCall
| CCall
| CPlusPlus
| DotNet
| Jvm
| Js
| JavaScript
| CApi
data ArrowAppl dom stage
= LeftAppl
| RightAppl
| LeftHighApp
| RightHighApp
data Safety dom stage
= Safe
| ThreadSafe
| Unsafe
| Interruptible
data Assoc dom stage
= AssocNone
| AssocLeft
| AssocRight
data Role dom stage
= Nominal
| Representational
| Phantom
data ConlikeAnnot dom stage = ConlikeAnnot
data Precedence dom stage
= Precedence { _precedenceValue :: Int }
data LineNumber dom stage
= LineNumber { _lineNumber :: Int }
data PhaseControl dom stage
= PhaseControl { _phaseUntil :: AnnMaybe PhaseInvert dom stage
, _phaseNumber :: Ann PhaseNumber dom stage
}
data PhaseNumber dom stage
= PhaseNumber { _phaseNum :: Integer }
data PhaseInvert dom stage = PhaseInvert