stil4m / elm-syntax / Elm.Syntax.Expression

This syntax represents all that you can express in Elm. Although it is a easy and simple language, you can express a lot! See the Expression type for all the things you can express.

Types


type Expression
    = UnitExpr
    | Application (List (Elm.Syntax.Node.Node Expression))
    | OperatorApplication String Elm.Syntax.Infix.InfixDirection (Elm.Syntax.Node.Node Expression) (Elm.Syntax.Node.Node Expression)
    | FunctionOrValue Elm.Syntax.ModuleName.ModuleName String
    | IfBlock (Elm.Syntax.Node.Node Expression) (Elm.Syntax.Node.Node Expression) (Elm.Syntax.Node.Node Expression)
    | PrefixOperator String
    | Operator String
    | Integer Basics.Int
    | Hex Basics.Int
    | Floatable Basics.Float
    | Negation (Elm.Syntax.Node.Node Expression)
    | Literal String
    | CharLiteral Char
    | TupledExpression (List (Elm.Syntax.Node.Node Expression))
    | ParenthesizedExpression (Elm.Syntax.Node.Node Expression)
    | LetExpression LetBlock
    | CaseExpression CaseBlock
    | LambdaExpression Lambda
    | RecordExpr (List (Elm.Syntax.Node.Node RecordSetter))
    | ListExpr (List (Elm.Syntax.Node.Node Expression))
    | RecordAccess (Elm.Syntax.Node.Node Expression) (Elm.Syntax.Node.Node String)
    | RecordAccessFunction String
    | RecordUpdateExpression (Elm.Syntax.Node.Node String) (List (Elm.Syntax.Node.Node RecordSetter))
    | GLSLExpression String

Custom type for all expressions such as:


type alias Lambda =
{ args : List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)
, expression : Elm.Syntax.Node.Node Expression 
}

Expression for a lambda


type alias LetBlock =
{ declarations : List (Elm.Syntax.Node.Node LetDeclaration)
, expression : Elm.Syntax.Node.Node Expression 
}

Expression for a let block


type LetDeclaration
    = LetFunction Function
    | LetDestructuring (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern) (Elm.Syntax.Node.Node Expression)

Union type for all possible declarations in a let block


type alias RecordSetter =
( Elm.Syntax.Node.Node String
, Elm.Syntax.Node.Node Expression 
)

Expression for setting a record field


type alias CaseBlock =
{ expression : Elm.Syntax.Node.Node Expression
, cases : Cases 
}

Expression for a case block


type alias Cases =
List Case

Type alias for a list of cases


type alias Case =
( Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern
, Elm.Syntax.Node.Node Expression 
)

A case in a case block


type alias Function =
{ documentation : Maybe (Elm.Syntax.Node.Node Elm.Syntax.Documentation.Documentation)
, signature : Maybe (Elm.Syntax.Node.Node Elm.Syntax.Signature.Signature)
, declaration : Elm.Syntax.Node.Node FunctionImplementation 
}

Type alias for a full function


type alias FunctionImplementation =
{ name : Elm.Syntax.Node.Node String
, arguments : List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)
, expression : Elm.Syntax.Node.Node Expression 
}

Type alias for a function's implementation

Functions

functionRange : Function -> Elm.Syntax.Range.Range

Get the full range of a function

isLambda : Expression -> Basics.Bool

Check whether an expression is a lambda-expression

isLet : Expression -> Basics.Bool

Check whether an expression is a let-expression

isIfElse : Expression -> Basics.Bool

Check whether an expression is an if-else-expression

isCase : Expression -> Basics.Bool

Check whether an expression is a case-expression

isOperatorApplication : Expression -> Basics.Bool

Check whether an expression is an operator application expression

Serialization

encode : Expression -> Json.Encode.Value

Encode an Expression syntax element to JSON.

encodeFunction : Function -> Json.Encode.Value

Encode a Function syntax element to JSON.

decoder : Json.Decode.Decoder Expression

JSON decoder for an Expression syntax element.

functionDecoder : Json.Decode.Decoder Function

JSON decoder for an Function syntax element.