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