PmExpr

ghc-8.4.4: The GHC API

Safe Haskell | None
Language | Haskell2010

PmExpr

Synopsis

- data PmExpr
  - = PmExprVar Name
  - | PmExprCon ConLike [PmExpr]
  - | PmExprLit PmLit
  - | PmExprEq PmExpr PmExpr
  - | PmExprOther (HsExpr GhcTc)
- data PmLit
  - = PmSLit (HsLit GhcTc)
  - | PmOLit Bool (HsOverLit GhcTc)
- type SimpleEq = (Id, PmExpr)
- type ComplexEq = (PmExpr, PmExpr)
- toComplex :: SimpleEq -> ComplexEq
- eqPmLit :: PmLit -> PmLit -> Bool
- truePmExpr :: PmExpr
- falsePmExpr :: PmExpr
- isTruePmExpr :: PmExpr -> Bool
- isFalsePmExpr :: PmExpr -> Bool
- isNotPmExprOther :: PmExpr -> Bool
- lhsExprToPmExpr :: LHsExpr GhcTc -> PmExpr
- hsExprToPmExpr :: HsExpr GhcTc -> PmExpr
- substComplexEq :: Name -> PmExpr -> ComplexEq -> Either ComplexEq ComplexEq
- filterComplex :: [ComplexEq] -> [PmNegLitCt]
- pprPmExprWithParens :: PmExpr -> PmPprM SDoc
- runPmPprM :: PmPprM a -> [PmNegLitCt] -> (a, [(SDoc, [PmLit])])

# Documentation

data PmExpr #

Lifted expressions for pattern match checking.

Constructors

PmExprVar Name |
PmExprCon ConLike [PmExpr] |
PmExprLit PmLit |
PmExprEq PmExpr PmExpr |
PmExprOther (HsExpr GhcTc) |

Instances

Outputable PmExpr # |
Instance details Defined in PmExpr Methods ppr :: PmExpr -> SDoc # pprPrec :: Rational -> PmExpr -> SDoc #

data PmLit #

Literals (simple and overloaded ones) for pattern match checking.

Constructors

PmSLit (HsLit GhcTc) |
PmOLit Bool (HsOverLit GhcTc) |

Instances

Outputable PmLit # |
Instance details Defined in PmExpr Methods ppr :: PmLit -> SDoc # pprPrec :: Rational -> PmLit -> SDoc #

type SimpleEq = (Id, PmExpr) #

Term equalities

type ComplexEq = (PmExpr, PmExpr) #

toComplex :: SimpleEq -> ComplexEq #

Lift a `SimpleEq` to a `ComplexEq`

eqPmLit :: PmLit -> PmLit -> Bool #

Equality between literals for pattern match checking.

truePmExpr :: PmExpr #

Expression `True`

falsePmExpr :: PmExpr #

Expression `False`

isTruePmExpr :: PmExpr -> Bool #

Check whether a PmExpr is syntactically equal to term `True`.

isFalsePmExpr :: PmExpr -> Bool #

Check whether a PmExpr is syntactically equal to term `False`.

isNotPmExprOther :: PmExpr -> Bool #

Check if an expression is lifted or not

lhsExprToPmExpr :: LHsExpr GhcTc -> PmExpr #

hsExprToPmExpr :: HsExpr GhcTc -> PmExpr #

substComplexEq :: Name -> PmExpr -> ComplexEq -> Either ComplexEq ComplexEq #

Substitute in a complex equality. We return (Left eq) if the substitution affected the equality or (Right eq) if nothing happened.

filterComplex :: [ComplexEq] -> [PmNegLitCt] #

pprPmExprWithParens :: PmExpr -> PmPprM SDoc #

runPmPprM :: PmPprM a -> [PmNegLitCt] -> (a, [(SDoc, [PmLit])]) #