haskell-tools-rewrite-1.0.1.1: Facilities for generating new parts of the Haskell-Tools AST

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Tools.Rewrite.Match.Exprs

Contents

Description

UPattern matching expression-level AST fragments for refactorings.

Synopsis

Expressions

pattern Var :: Name -> Expr #

An expression for a variable or a data constructor ( a )

pattern Lit :: Literal -> Expr #

A literal expression ( 42 )

pattern InfixApp :: Expr -> Operator -> Expr -> Expr #

An infix operator application ( a + b )

pattern PrefixApp :: Operator -> Expr -> Expr #

Prefix operator application ( -x )

pattern App :: Expr -> Expr -> Expr #

Function application ( f 4 )

pattern Lambda :: PatternList -> Expr -> Expr #

Lambda expression ( \a b -> a + b )

pattern Let :: LocalBindList -> Expr -> Expr #

Local binding ( let x = 2; y = 3 in e x y )

pattern If :: Expr -> Expr -> Expr -> Expr #

If expression ( if a then b else c )

pattern MultiIf :: GuardedCaseRhsList -> Expr #

Multi way if expressions with MultiWayIf extension ( if | guard1 -> expr1; guard2 -> expr2 )

pattern Case :: Expr -> AltList -> Expr #

Pattern matching expression ( case expr of pat1 -> expr1; pat2 -> expr2 )

pattern Do :: StmtList -> Expr #

Do-notation expressions ( do x <- act1; act2 )

pattern MDo :: StmtList -> Expr #

MDo-notation expressions ( mdo x <- act1; act2 )

pattern Tuple :: ExprList -> Expr #

Tuple expression ( (e1, e2, e3) )

pattern UnboxedTuple :: ExprList -> Expr #

Unboxed tuple expression ( (# e1, e2, e3 #) )

pattern TupleSection :: TupSecElemList -> Expr #

Tuple section, enabled with TupleSections ( (a,,b) ). One of the elements must be missing.

pattern UnboxedTupleSection :: TupSecElemList -> Expr #

Unboxed tuple section enabled with TupleSections ( () ). One of the elements must be missing.

pattern List :: ExprList -> Expr #

List expression: [1,2,3]

pattern ParArray :: ExprList -> Expr #

Parallel array expression: [: 1,2,3 :]

pattern Paren :: Expr -> Expr #

Parenthesized expression: ( a + b )

pattern LeftSection :: Expr -> Operator -> Expr #

Left operator section: (1+)

pattern RightSection :: Operator -> Expr -> Expr #

Right operator section: (+1)

pattern RecCon :: Name -> FieldUpdateList -> Expr #

Record value construction: Point { x = 3, y = -2 }

pattern RecUpdate :: Expr -> FieldUpdateList -> Expr #

Record value update: p1 { x = 3, y = -2 }

pattern Enum :: Expr -> MaybeExpr -> MaybeExpr -> Expr #

Enumeration expression ( [1,3..10] )

pattern ParArrayEnum :: Expr -> MaybeExpr -> Expr -> Expr #

Parallel array enumeration ( [: 1,3 .. 10 :] )

pattern ListComp :: Expr -> ListCompBodyList -> Expr #

List comprehension ( [ (x, y) | x <- xs | y <- ys ] )

pattern ParArrayListComp :: Expr -> ListCompBodyList -> Expr #

Parallel array comprehensions [: (x, y) | x <- xs , y <- ys :] enabled by ParallelArrays

pattern TypeSig :: Expr -> Type -> Expr #

Explicit type signature ( x :: Int )

pattern ExplicitTypeApp :: Expr -> Type -> Expr #

Explicit type application ( show @Integer (read "5") )

pattern VarQuote :: Name -> Expr #

'x for template haskell reifying of expressions

pattern TypeQuote :: Name -> Expr #

''T for template haskell reifying of types

pattern BracketExpr :: Bracket -> Expr #

Template haskell bracket expression

pattern SpliceExpr :: Splice -> Expr #

Template haskell splice expression, for example: $(gen a) or $x

pattern QuasiQuoteExpr :: QuasiQuote -> Expr #

Template haskell quasi-quotation: [$quoter|str]

pattern ExprPragma :: ExprPragma -> Expr -> Expr #

Template haskell quasi-quotation: [$quoter|str]

pattern Proc :: Pattern -> Cmd -> Expr #

Arrow definition: proc a -> f -< a+1

pattern ArrowApp :: Expr -> ArrowApp -> Expr -> Expr #

Arrow definition: proc a -> f -< a+1

pattern LambdaCase :: AltList -> Expr #

Lambda case ( case 0 -> 1; 1 -> 2 )

pattern StaticPointer :: Expr -> Expr #

Static pointer expression ( static e ). The inner expression must be closed (cannot have variables bound outside)

Field updates

pattern NormalFieldUpdate :: Name -> Expr -> FieldUpdate #

Update of a field ( x = 1 )

pattern FieldPun :: Name -> FieldUpdate #

Update the field to the value of the same name ( x )

pattern FieldWildcard :: FieldWildcard -> FieldUpdate #

Update the fields of the bounded names to their values ( .. ). Must be the last initializer. Cannot be used in a record update expression.

Tuple sections

pattern TupSecPresent :: Expr -> TupSecElem #

An existing element in a tuple section

pattern TupSecMissing :: TupSecElem #

A missing element in a tuple section

Pattern matching and guards

pattern Alt :: Pattern -> CaseRhs -> MaybeLocalBinds -> Alt #

Clause of case expression ( Just x -> x + 1 )

pattern CaseRhs :: Expr -> CaseRhs #

Unguarded right-hand side a pattern match ( -> 3 )

pattern GuardedCaseRhss :: GuardedCaseRhsList -> CaseRhs #

Guarded right-hand sides of a pattern match ( | x == 1 -> 3; | otherwise -> 4 )

pattern GuardedCaseRhs :: RhsGuardList -> Expr -> GuardedCaseRhs #

A guarded right-hand side of pattern matches binding ( | x > 3 -> 2 )

Pragmas that can be applied to expressions

pattern CorePragma :: String -> ExprPragma #

A CORE pragma for adding notes to expressions.

pattern SccPragma :: String -> ExprPragma #

An SCC pragma for defining cost centers for profiling

pattern GeneratedPragma :: SourceRange -> ExprPragma #

A pragma that describes if an expression was generated from a code fragment by an external tool ( {--} )

pattern SourceRange :: String -> Integer -> Integer -> Integer -> Integer -> SourceRange #

In-AST source ranges (for generated pragmas)

Commands

pattern ArrowAppCmd :: Expr -> ArrowApp -> Expr -> Cmd #

An arrow application command ( f -< x + 1 )

pattern ArrowFormCmd :: Expr -> CmdList -> Cmd #

A form command ( (|untilA (increment -< x+y) (within 0.5 -< x)|) )

pattern AppCmd :: Cmd -> Expr -> Cmd #

A function application command

pattern InfixCmd :: Cmd -> Name -> Cmd -> Cmd #

An infix command application

pattern LambdaCmd :: PatternList -> Cmd -> Cmd #

An infix command application

pattern ParenCmd :: Cmd -> Cmd #

A parenthesized command

pattern CaseCmd :: Expr -> CmdAltList -> Cmd #

A pattern match command

pattern IfCmd :: Expr -> Cmd -> Cmd -> Cmd #

An if command ( if f x y then g -< x+1 else h -< y+2 )

pattern LetCmd :: LocalBindList -> Cmd -> Cmd #

A local binding command ( let z = x+y )

pattern DoCmd :: CmdStmtList -> Cmd #

A local binding command ( let z = x+y )

pattern LeftAppl :: ArrowApp #

Left arrow application: -<

pattern RightAppl :: ArrowApp #

Right arrow application: >-

pattern LeftHighApp :: ArrowApp #

Left arrow high application: -<<

pattern RightHighApp :: ArrowApp #

Right arrow high application: >>-

pattern Hole :: Expr #

A hole expression _