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.
Custom type for all expressions such as:
Unit
: ()
Application
: add a b
OperatorApplication
: a + b
FunctionOrValue
: add
or True
IfBlock
: if a then b else c
PrefixOperator
: (+)
Operator
: +
(not possible to get in practice)Integer
: 42
Hex
: 0x1F
Floatable
: 42.0
Negation
: -a
Literal
: "text"
CharLiteral
: 'a'
TupledExpression
: (a, b)
or (a, b, c)
ParenthesizedExpression
: (a)
LetExpression
: let a = 4 in a
CaseExpression
: case a of
followed by pattern matchesLambdaExpression
: (\a -> a)
RecordExpr
: { name = "text" }
ListExpr
: [ x, y ]
RecordAccess
: a.name
RecordAccessFunction
: .name
RecordUpdateExpression
: { a | name = "text" }
GLSLExpression
: [glsl| ... |]
{ args : List (Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern)
, expression : Elm.Syntax.Node.Node Expression
}
Expression for a lambda
{ declarations : List (Elm.Syntax.Node.Node LetDeclaration)
, expression : Elm.Syntax.Node.Node Expression
}
Expression for a let block
Union type for all possible declarations in a let block
( Elm.Syntax.Node.Node String
, Elm.Syntax.Node.Node Expression
)
Expression for setting a record field
{ expression : Elm.Syntax.Node.Node Expression
, cases : Cases
}
Expression for a case block
List Case
Type alias for a list of cases
( Elm.Syntax.Node.Node Elm.Syntax.Pattern.Pattern
, Elm.Syntax.Node.Node Expression
)
A case in a case block
{ 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
{ 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
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
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.