module Language.Haskell.Tools.AST.Representation.Patterns where
import Language.Haskell.Tools.AST.Ann (Ann, AnnListG)
import Language.Haskell.Tools.AST.Representation.Exprs (UExpr, UFieldWildcard)
import Language.Haskell.Tools.AST.Representation.Literals (ULiteral)
import Language.Haskell.Tools.AST.Representation.Names (UName, UOperator)
import Language.Haskell.Tools.AST.Representation.TH (UQuasiQuote, USplice)
import Language.Haskell.Tools.AST.Representation.Types (UType)
data UPattern dom stage
= UVarPat { _patternName :: Ann UName dom stage
}
| ULitPat { _patternLiteral :: Ann ULiteral dom stage
}
| UInfixAppPat { _patternLhs :: Ann UPattern dom stage
, _patternOperator :: Ann UOperator dom stage
, _patternRhs :: Ann UPattern dom stage
}
| UAppPat { _patternName :: Ann UName dom stage
, _patternArgs :: AnnListG UPattern dom stage
}
| UTuplePat { _patternElems :: AnnListG UPattern dom stage
}
| UUnboxTuplePat { _patternElems :: AnnListG UPattern dom stage
}
| UListPat { _patternElems :: AnnListG UPattern dom stage
}
| UParArrPat { _patternElems :: AnnListG UPattern dom stage
}
| UParenPat { _patternInner :: Ann UPattern dom stage
}
| URecPat { _patternName :: Ann UName dom stage
, _patternFields :: AnnListG UPatternField dom stage
}
| UAsPat { _patternName :: Ann UName dom stage
, _patternInner :: Ann UPattern dom stage
}
| UWildPat
| UIrrefutablePat { _patternInner :: Ann UPattern dom stage
}
| UBangPat { _patternInner :: Ann UPattern dom stage
}
| UTypeSigPat { _patternInner :: Ann UPattern dom stage
, _patternType :: Ann UType dom stage
}
| UViewPat { _patternExpr :: Ann UExpr dom stage
, _patternInner :: Ann UPattern dom stage
}
| USplicePat { _patternSplice :: Ann USplice dom stage
}
| UQuasiQuotePat { _patQQ :: Ann UQuasiQuote dom stage
}
| UNPlusKPat { _patternName :: Ann UName dom stage
, _patternLit :: Ann ULiteral dom stage
}
data UPatternField dom stage
= UNormalFieldPattern { _fieldPatternName :: Ann UName dom stage
, _fieldPattern :: Ann UPattern dom stage
}
| UFieldPunPattern { _fieldPatternName :: Ann UName dom stage
}
| UFieldWildcardPattern { _fieldPatternWildcard :: Ann UFieldWildcard dom stage
}