module Language.Haskell.Tools.AST.Representation.Names where
import Language.Haskell.Tools.AST.Ann (Ann, AnnListG(..))
data UOperator dom stage
= UBacktickOp { _operatorName :: Ann UQualifiedName dom stage
}
| UNormalOp { _operatorName :: Ann UQualifiedName dom stage
}
data UName dom stage
= UParenName { _simpleName :: Ann UQualifiedName dom stage
}
| UNormalName { _simpleName :: Ann UQualifiedName dom stage
}
| UImplicitName { _simpleName :: Ann UQualifiedName dom stage
}
data UQualifiedName dom stage
= UQualifiedName { _qualifiers :: AnnListG UNamePart dom stage
, _unqualifiedName :: Ann UNamePart dom stage
}
nameFromList :: AnnListG UNamePart dom stage -> UQualifiedName dom stage
nameFromList (AnnListG a xs) | not (null xs)
= UQualifiedName (AnnListG a (init xs)) (last xs)
nameFromList _ = error "nameFromList: empty list"
data UNamePart dom stage
= UNamePart { _simpleNameStr :: String }
data UStringNode dom stage
= UStringNode { _stringNodeStr :: String }