module Language.Haskell.Tools.AST.Patterns where
import Language.Haskell.Tools.AST.Ann
import Language.Haskell.Tools.AST.Base
import Language.Haskell.Tools.AST.Literals
import Language.Haskell.Tools.AST.Types
import Language.Haskell.Tools.AST.Exprs (Expr)
import Language.Haskell.Tools.AST.TH
data Pattern a
= VarPat { _patternName :: Ann Name a
}
| LitPat { _patternLiteral :: Ann Literal a
}
| InfixPat { _patternLhs :: Ann Pattern a
, _patternOperator :: Ann Operator a
, _patternRhs :: Ann Pattern a
}
| AppPat { _patternName :: Ann Name a
, _patternArgs :: AnnList Pattern a
}
| TuplePat { _patternElems :: AnnList Pattern a
}
| UnboxTuplePat { _patternElems :: AnnList Pattern a
}
| ListPat { _patternElems :: AnnList Pattern a
}
| ParArrPat { _patternElems :: AnnList Pattern a
}
| ParenPat { _patternInner :: Ann Pattern a
}
| RecPat { _patternName :: Ann Name a
, _patternFields :: AnnList PatternField a
}
| AsPat { _patternName :: Ann Name a
, _patternInner :: Ann Pattern a
}
| WildPat
| IrrPat { _patternInner :: Ann Pattern a
}
| BangPat { _patternInner :: Ann Pattern a
}
| TypeSigPat { _patternInner :: Ann Pattern a
, _patternType :: Ann Type a
}
| ViewPat { _patternExpr :: Ann Expr a
, _patternInner :: Ann Pattern a
}
| SplicePat { _patternSplice :: Ann Splice a
}
| QuasiQuotePat { _patQQ :: Ann QuasiQuote a
}
| NPlusKPat { _patternName :: Ann Name a
, _patternLit :: Ann Literal a
}
data PatternField a
= NormalFieldPattern { _fieldPatternName :: Ann Name a
, _fieldPattern :: Ann Pattern a
}
| FieldPunPattern { _fieldPatternName :: Ann Name a
}
| FieldWildcardPattern