Constructors
Members
ConstrApp ::= SimpleType {ParArgumentExprs}
ConstrApp ::= SimpleType {ParArgumentExprs}
Expr ::= [implicit'] FunParams
=>' Expr
| Expr1
FunParams ::= Bindings
| id
| _' ExprInParens ::= PostfixExpr
:' Type
| Ex...
[`implicit'] FunParams `=>' Block
| `try' Expr Catches [`finally' Expr]
[Expr]
[SimpleExpr `.'] id `=' Expr
Bindings ::= `(' [Binding {`,' Binding}]
Expr ::= [implicit'] FunParams
=>' Expr
| Expr1
FunParams ::= Bindings
| id
| _' ExprInParens ::= PostfixExpr
:' Type
| Expr
BlockResult ::= [implicit'] FunParams
=>' Block
| Expr1
Expr1 ::= if'
(' Expr )' {nl} Expr [[semi] else Expr] |
if' Expr then' Expr [[semi] else Expr] |
while' (' Expr
)' {nl} Expr
| while' Expr
do' Expr
| do' Expr [semi]
while' Expr
| try' Expr Catches [
finally' Expr]
| try' Expr [
finally' Expr]
| throw' Expr |
return' [Expr]
| ForExpr
| [SimpleExpr .'] id
=' Expr
| SimpleExpr1 ArgumentExprs =' Expr | PostfixExpr [Ascription] | PostfixExpr
match' {' CaseClauses
}'
Bindings ::= (' [Binding {
,' Binding}] )' Binding ::= (id |
_') [:' Type] Ascription ::=
:' CompoundType
| :' Annotation {Annotation} |
:' _'
*'
FunArgType ::= Type | `=>' Type
FunArgType ::= Type | `=>' Type
ImportExpr ::= StableId .' (id |
_' | ImportSelectors)
ImportExpr ::= StableId .' (id |
_' | ImportSelectors)
The offset of the last time when a statement on a new line was definitely encountered in the current scope or an outer scope.
The offset of the last time when a statement on a new line was definitely encountered in the current scope or an outer scope.
NamedTypeArg ::= id `=' Type
NamedTypeArg ::= id `=' Type
Pattern ::= Pattern1 { `|' Pattern1 }
Pattern ::= Pattern1 { `|' Pattern1 }
Pattern2 ::= [varid `@'] InfixPattern
Pattern2 ::= [varid `@'] InfixPattern
The implicit parameters introduced by _
in the current expression.
Parameters appear in reverse order.
The implicit parameters introduced by _
in the current expression.
Parameters appear in reverse order.
PrefixExpr ::= [-' |
+' | ~' |
!'] SimpleExpr
PrefixExpr ::= [-' |
+' | ~' |
!'] SimpleExpr
RefinedType ::= WithType {Annotation | [nl] Refinement}
RefinedType ::= WithType {Annotation | [nl] Refinement}
SimplePattern ::= PatVar
| Literal
| XmlPattern
| (' [Patterns]
)'
| SimplePattern1 [TypeArgs] [ArgumentPatterns]
SimplePattern1 ::= Path
| {' Block
}...
SimplePattern ::= PatVar
| Literal
| XmlPattern
| (' [Patterns]
)'
| SimplePattern1 [TypeArgs] [ArgumentPatterns]
SimplePattern1 ::= Path
| {' Block
}'
| SimplePattern1 .' id PatVar ::= id |
_'
the markup parser
the markup parser
Consume one token of the specified type, or signal an error if it is not there.
Consume one token of the specified type, or signal an error if it is not there.
semi = nl {nl} | ;' nl =
\n' // where allowed
semi = nl {nl} | ;' nl =
\n' // where allowed
AccessQualifier ::= "[" (id | this) "]"
AccessQualifier ::= "[" (id | this) "]"
Always add the syntactic mod
, but check and conditionally add semantic mod.flags
Always add the syntactic mod
, but check and conditionally add semantic mod.flags
Adjust start of annotation or constructor to position of preceding @ or new
Adjust start of annotation or constructor to position of preceding @ or new
Annotation ::= `@' SimpleType {ParArgumentExprs}
Annotation ::= `@' SimpleType {ParArgumentExprs}
AnnotType ::= SimpleType {Annotation}
AnnotType ::= SimpleType {Annotation}
ArgTypes ::= Type {,' Type} | NamedTypeArg {
,' NamedTypeArg}
ArgTypes ::= Type {,' Type} | NamedTypeArg {
,' NamedTypeArg}
ArgumentExprs ::= ParArgumentExprs | [nl] BlockExpr
ArgumentExprs ::= ParArgumentExprs | [nl] BlockExpr
ArgumentExprss ::= {ArgumentExprs}
ArgumentExprss ::= {ArgumentExprs}
ArgumentPatterns ::= (' [Patterns]
)'
| (' [Patterns
,'] Pattern2 :'
_' `*' ')
ArgumentPatterns ::= (' [Patterns]
)'
| (' [Patterns
,'] Pattern2 :'
_' `*' ')
Binding ::= (id | _') [
:' Type]
Binding ::= (id | _') [
:' Type]
Block ::= BlockStatSeq
Block ::= BlockStatSeq
BlockExpr ::= {' (CaseClauses | Block)
}'
BlockExpr ::= {' (CaseClauses | Block)
}'
BlockStatSeq ::= { BlockStat semi } [ResultExpr] BlockStat ::= Import | Annotations [implicit] [lazy] Def | Annotations LocalModifiers TmplDef | Expr1 |
BlockStatSeq ::= { BlockStat semi } [ResultExpr] BlockStat ::= Import | Annotations [implicit] [lazy] Def | Annotations LocalModifiers TmplDef | Expr1 |
CaseClause ::= case Pattern [Guard] `=>' Block
CaseClause ::= case Pattern [Guard] `=>' Block
CaseClauses ::= CaseClause {CaseClause}
CaseClauses ::= CaseClause {CaseClause}
ClassDef ::= id [ClsTypeParamClause] [ConstrMods] ClsParamClauses TemplateOpt
ClassDef ::= id [ClsTypeParamClause] [ConstrMods] ClsParamClauses TemplateOpt
CompilationUnit ::= {package QualId semi} TopStatSeq
CompilationUnit ::= {package QualId semi} TopStatSeq
ConstrBlock ::= {' SelfInvocation {semi BlockStat}
}'
ConstrBlock ::= {' SelfInvocation {semi BlockStat}
}'
ConstrExpr ::= SelfInvocation | ConstrBlock
ConstrExpr ::= SelfInvocation | ConstrBlock
ConstrMods ::= AccessModifier | Annotation {Annotation} (AccessModifier | `this')
ConstrMods ::= AccessModifier | Annotation {Annotation} (AccessModifier | `this')
Convert tree to formal parameter
Convert tree to formal parameter
Convert tree to formal parameter
Convert tree to formal parameter
Convert tree to formal parameter
Convert tree to formal parameter
Convert tree to formal parameter list
Convert tree to formal parameter list
Convert (qual)ident to type identifier
Convert (qual)ident to type identifier
DefDef ::= DefSig (:' Type [
=' Expr] | "=" Expr)
| this ParamClause ParamClauses =' ConstrExpr DefDcl ::= DefSig
:' Type
DefSig ::= id DefTypeParamClaus...
DefDef ::= DefSig (:' Type [
=' Expr] | "=" Expr)
| this ParamClause ParamClauses =' ConstrExpr DefDcl ::= DefSig
:' Type
DefSig ::= id [DefTypeParamClause] ParamClauses
DefDef ::= DefSig (:' Type [
=' Expr] | "=" Expr)
| this ParamClause ParamClauses =' ConstrExpr DefDcl ::= DefSig
:' Type
DefSig ::= id DefTypeParamClaus...
DefDef ::= DefSig (:' Type [
=' Expr] | "=" Expr)
| this ParamClause ParamClauses =' ConstrExpr DefDcl ::= DefSig
:' Type
DefSig ::= id [DefTypeParamClause] ParamClauses
Def ::= val PatDef | var VarDef | def DefDef | type {nl} TypeDcl | TmplDef Dcl ::= val ValDcl | var ValDcl | def DefDcl | type {nl} TypeDcl
Def ::= val PatDef | var VarDef | def DefDef | type {nl} TypeDcl | TmplDef Dcl ::= val ValDcl | var ValDcl | def DefDcl | type {nl} TypeDcl
DotSelectors ::= { `.' id }
Accept .' separated identifiers acting as a selectors on given tree
t`.
DotSelectors ::= { `.' id }
Accept .' separated identifiers acting as a selectors on given tree
t`.
DotSelectors ::= { `.' id }
Accept .' separated identifiers acting as a selectors on given tree
t`.
DotSelectors ::= { `.' id }
Accept .' separated identifiers acting as a selectors on given tree
t`.
Enumerator ::= Generator | Guard | Pattern1 `=' Expr
Enumerator ::= Generator | Guard | Pattern1 `=' Expr
Enumerators ::= Generator {semi Enumerator | Guard}
Enumerators ::= Generator {semi Enumerator | Guard}
EqualsExpr ::= `=' Expr
EqualsExpr ::= `=' Expr
ExprsInParens ::= ExprInParens {`,' ExprInParens}
ExprsInParens ::= ExprInParens {`,' ExprInParens}
Checks whether t
is a wildcard type.
If it is, returns the [[Position]] where the wildcard occurs.
Checks whether t
is a wildcard type.
If it is, returns the [[Position]] where the wildcard occurs.
ForExpr ::= for' (
(' Enumerators )' |
{' Enumerators }') {nl} [
yield'] Expr
| for' Enumerators (
do' Expr | `yield' Expr)
ForExpr ::= for' (
(' Enumerators )' |
{' Enumerators }') {nl} [
yield'] Expr
| for' Enumerators (
do' Expr | `yield' Expr)
Generator ::= Pattern `<-' Expr
Generator ::= Pattern `<-' Expr
Guard ::= if PostfixExpr
Guard ::= if PostfixExpr
Accept identifier and return its name as a term name.
Accept identifier and return its name as a term name.
Expr ::= implicit id =>' Expr BlockResult ::= implicit id [
:' InfixType] `=>' Block // Scala2 only
Expr ::= implicit id =>' Expr BlockResult ::= implicit id [
:' InfixType] `=>' Block // Scala2 only
Import ::= import ImportExpr {`,' ImportExpr}
Import ::= import ImportExpr {`,' ImportExpr}
ImportSelector ::= id [=>' id |
=>' `_']
ImportSelector ::= id [=>' id |
=>' `_']
ImportSelectors ::= {' {ImportSelector
,'} (ImportSelector | _')
}'
ImportSelectors ::= {' {ImportSelector
,'} (ImportSelector | _')
}'
Issue an error at current offset taht input is incomplete
Issue an error at current offset taht input is incomplete
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
operand { infixop operand} [postfixop], respecting rules of associativity and precedence.
InfixPattern ::= SimplePattern {id [nl] SimplePattern}
InfixPattern ::= SimplePattern {id [nl] SimplePattern}
InfixType ::= RefinedType {id [nl] refinedType}
InfixType ::= RefinedType {id [nl] refinedType}
Is offset1 less or equally indented than offset2? This is the case if the characters between the preceding end-of-line and offset1 are a prefix of the c...
Is offset1 less or equally indented than offset2? This is the case if the characters between the preceding end-of-line and offset1 are a prefix of the characters between the preceding end-of-line and offset2.
The offset of the last time when a statement on a new line was definitely encountered in the current scope or an outer scope.
The offset of the last time when a statement on a new line was definitely encountered in the current scope or an outer scope.
SimpleExpr ::= literal | symbol | null
SimpleExpr ::= literal | symbol | null
SimpleExpr ::= literal | symbol | null
SimpleExpr ::= literal | symbol | null
SimpleExpr ::= literal | symbol | null
SimpleExpr ::= literal | symbol | null
Create a tree representing a packaging
Create a tree representing a packaging
MixinQualifier ::= [' id
]'
MixinQualifier ::= [' id
]'
{Annotation} {Modifier} Modifiers ::= {Modifier} LocalModifiers ::= {LocalModifier} AccessModifier ::= (private | protected) [AccessQualifier] Modifier...
{Annotation} {Modifier} Modifiers ::= {Modifier} LocalModifiers ::= {LocalModifier} AccessModifier ::= (private | protected) [AccessQualifier] Modifier ::= LocalModifier | AccessModifier | override LocalModifier ::= abstract | final | sealed | implicit | lazy
{Annotation} {Modifier} Modifiers ::= {Modifier} LocalModifiers ::= {LocalModifier} AccessModifier ::= (private | protected) [AccessQualifier] Modifier...
{Annotation} {Modifier} Modifiers ::= {Modifier} LocalModifiers ::= {LocalModifier} AccessModifier ::= (private | protected) [AccessQualifier] Modifier ::= LocalModifier | AccessModifier | override LocalModifier ::= abstract | final | sealed | implicit | lazy
{Annotation} {Modifier} Modifiers ::= {Modifier} LocalModifiers ::= {LocalModifier} AccessModifier ::= (private | protected) [AccessQualifier] Modifier...
{Annotation} {Modifier} Modifiers ::= {Modifier} LocalModifiers ::= {LocalModifier} AccessModifier ::= (private | protected) [AccessQualifier] Modifier ::= LocalModifier | AccessModifier | override LocalModifier ::= abstract | final | sealed | implicit | lazy
Drop private' modifier when followed by a qualifier. Contract
abstract' and `override' to ABSOVERRIDE
Drop private' modifier when followed by a qualifier. Contract
abstract' and `override' to ABSOVERRIDE
ObjectDef ::= id TemplateOpt
ObjectDef ::= id TemplateOpt
ObjectDef ::= id TemplateOpt
ObjectDef ::= id TemplateOpt
Packaging ::= package QualId [nl] {' TopStatSeq
}'
Packaging ::= package QualId [nl] {' TopStatSeq
}'
ParArgumentExprs ::= (' [ExprsInParens]
)'
| (' [ExprsInParens
,'] PostfixExpr :'
_' `*' ')' \
ParArgumentExprs ::= (' [ExprsInParens]
)'
| (' [ExprsInParens
,'] PostfixExpr :'
_' `*' ')' \
ParArgumentExprss ::= {ParArgumentExprs}
ParArgumentExprss ::= {ParArgumentExprs}
ClsParamClauses ::= {ClsParamClause} [[nl] ('
implicit' ClsParams )'] ClsParamClause ::= [nl]
(' [ClsParams] ')'
ClsParams ::= ClsParam {'...
[nl][DefParams]
ClsParamClauses ::= {ClsParamClause} [[nl] ('
implicit' ClsParams )'] ClsParamClause ::= [nl]
(' [ClsParams] ')'
ClsParams ::= ClsParam {' ClsParam} ClsParam ::= {Annotation} [{Modifier} (
val' | var') |
inline'] Param
DefParamClauses ::= {DefParamClause} [[nl] ('
implicit' DefParams )'] DefParamClause ::= [nl]
(' [DefParams] ')'
DefParams ::= DefParam {,' DefParam} DefParam ::= {Annotation} [
inline'] Param
Param ::= id :' ParamType [
=' Expr]
ClsParamClauses ::= {ClsParamClause} [[nl] ('
implicit' ClsParams )'] ClsParamClause ::= [nl]
(' [ClsParams] ')'
ClsParams ::= ClsParam {'...
[nl][DefParams]
ClsParamClauses ::= {ClsParamClause} [[nl] ('
implicit' ClsParams )'] ClsParamClause ::= [nl]
(' [ClsParams] ')'
ClsParams ::= ClsParam {' ClsParam} ClsParam ::= {Annotation} [{Modifier} (
val' | var') |
inline'] Param
DefParamClauses ::= {DefParamClause} [[nl] ('
implicit' DefParams )'] DefParamClause ::= [nl]
(' [DefParams] ')'
DefParams ::= DefParam {,' DefParam} DefParam ::= {Annotation} [
inline'] Param
Param ::= id :' ParamType [
=' Expr]
ParamType ::= [`=>'] ParamValueType
ParamType ::= [`=>'] ParamValueType
ParamValueType ::= Type [`*']
ParamValueType ::= Type [`*']
This is the general parse entry point. Overridden by ScriptParser
This is the general parse entry point. Overridden by ScriptParser
PatDef ::= Pattern2 {,' Pattern2} [
:' Type] =' Expr VarDef ::= PatDef | id {
,' id} :' Type
=' _' ValDcl ::= id {
,' id} :' Type VarDcl ::= id {
,' id} `...
PatDef ::= Pattern2 {,' Pattern2} [
:' Type] =' Expr VarDef ::= PatDef | id {
,' id} :' Type
=' _' ValDcl ::= id {
,' id} :' Type VarDcl ::= id {
,' id} `:' Type
PatDef ::= Pattern2 {,' Pattern2} [
:' Type] =' Expr VarDef ::= PatDef | id {
,' id} :' Type
=' _' ValDcl ::= id {
,' id} :' Type VarDcl ::= id {
,' id} `...
PatDef ::= Pattern2 {,' Pattern2} [
:' Type] =' Expr VarDef ::= PatDef | id {
,' id} :' Type
=' _' ValDcl ::= id {
,' id} :' Type VarDcl ::= id {
,' id} `:' Type
Path ::= StableId | [id `.'] this
Path ::= StableId | [id `.'] this
Path ::= StableId | [id `.'] this
Path ::= StableId | [id `.'] this
Pattern1 ::= PatVar Ascription | Pattern2
Pattern1 ::= PatVar Ascription | Pattern2
Patterns ::= Pattern [`,' Pattern]
Patterns ::= Pattern [`,' Pattern]
The implicit parameters introduced by _
in the current expression.
Parameters appear in reverse order.
The implicit parameters introduced by _
in the current expression.
Parameters appear in reverse order.
PostfixExpr ::= InfixExpr [id [nl]] InfixExpr ::= PrefixExpr | InfixExpr id [nl] InfixExpr
PostfixExpr ::= InfixExpr [id [nl]] InfixExpr ::= PrefixExpr | InfixExpr id [nl] InfixExpr
QualId ::= id {`.' id}
QualId ::= id {`.' id}
RefineStatSeq ::= RefineStat {semi RefineStat} RefineStat ::= Dcl | (in reality we admit Defs and filter them out afterwards)
RefineStatSeq ::= RefineStat {semi RefineStat} RefineStat ::= Dcl | (in reality we admit Defs and filter them out afterwards)
Refinement ::= {' RefineStatSeq
}'
Refinement ::= {' RefineStatSeq
}'
Accept identifier acting as a selector on given tree t
.
Accept identifier acting as a selector on given tree t
.
Selectors ::= id { `.' id }
Accept .' separated identifiers acting as a selectors on given tree
t`.
Selectors ::= id { `.' id }
Accept .' separated identifiers acting as a selectors on given tree
t`.
SelfInvocation ::= this ArgumentExprs {ArgumentExprs}
SelfInvocation ::= this ArgumentExprs {ArgumentExprs}
SimpleExpr ::= new Template
| BlockExpr
| SimpleExpr1 [_'] SimpleExpr1 ::= literal | xmlLiteral | Path |
(' [ExprsInParens] )' | SimpleExpr
.'...
SimpleExpr ::= new Template
| BlockExpr
| SimpleExpr1 [_'] SimpleExpr1 ::= literal | xmlLiteral | Path |
(' [ExprsInParens] )' | SimpleExpr
.' id
| SimpleExpr (TypeArgs | NamedTypeArgs)
| SimpleExpr1 ArgumentExprs
SimpleType ::= SimpleType TypeArgs
| SimpleType #' id | StableId | Path
.' type
| (' ArgTypes
)'
| `_' TypeBounds
| Refinement
| Literal
SimpleType ::= SimpleType TypeArgs
| SimpleType #' id | StableId | Path
.' type
| (' ArgTypes
)'
| `_' TypeBounds
| Refinement
| Literal
Skip on error to next safe point. Safe points are: - Closing braces, provided they match an opening brace before the error point. - Closing parens and br...
Skip on error to next safe point. Safe points are: - Closing braces, provided they match an opening brace before the error point. - Closing parens and brackets, provided they match an opening parent or bracket before the error point and there are no intervening other kinds of parens. - Semicolons and newlines, provided there are no intervening braces. - Definite statement starts on new lines, provided they are not more indented than the last known statement start before the error point.
StableId ::= id
| Path .' id | [id '.'] super [
[' id ]']
.' id
StableId ::= id
| Path .' id | [id '.'] super [
[' id ]']
.' id
If at end of file, issue an incompleteInputError. Otherwise issue a syntax error and skip to next safe point.
If at end of file, issue an incompleteInputError. Otherwise issue a syntax error and skip to next safe point.
Template ::= ConstrApps [TemplateBody] | TemplateBody ConstrApps ::= ConstrApp {`with' ConstrApp}
Template ::= ConstrApps [TemplateBody] | TemplateBody ConstrApps ::= ConstrApp {`with' ConstrApp}
TemplateBody ::= [nl] {' TemplateStatSeq
}'
TemplateBody ::= [nl] {' TemplateStatSeq
}'
TemplateOpt = [`extends' Template | TemplateBody]
TemplateOpt = [`extends' Template | TemplateBody]
TemplateStatSeq ::= [id [:' Type]
=>'] TemplateStat {semi TemplateStat}
TemplateStat ::= Import
| Annotations Modifiers Def
| Annotations Modifiers Dc...
TemplateStatSeq ::= [id [:' Type]
=>'] TemplateStat {semi TemplateStat}
TemplateStat ::= Import
| Annotations Modifiers Def
| Annotations Modifiers Dcl
| Expr1
| super ArgumentExprs {ArgumentExprs}
|
Accept identifier and return Ident with its name as a term name.
Accept identifier and return Ident with its name as a term name.
TmplDef ::= ([case']
class' | trait') ClassDef | [
case'] `object' ObjectDef
TmplDef ::= ([case']
class' | trait') ClassDef | [
case'] `object' ObjectDef
part { separator
part }
part { separator
part }
TopStatSeq ::= TopStat {semi TopStat} TopStat ::= Annotations Modifiers TmplDef | Packaging | package object objectDef | Import |
TopStatSeq ::= TopStat {semi TopStat} TopStat ::= Annotations Modifiers TmplDef | Packaging | package object objectDef | Import |
Same as [[typ]], but if this results in a wildcard it emits a syntax error and
returns a tree for type Any
instead.
Same as [[typ]], but if this results in a wildcard it emits a syntax error and
returns a tree for type Any
instead.
Type ::= [implicit'] FunArgTypes
=>' Type
| HkTypeParamClause ->' Type | InfixType FunArgTypes ::= InfixType |
(' [ FunArgType {,' FunArgTy...
Type ::= [implicit'] FunArgTypes
=>' Type
| HkTypeParamClause ->' Type | InfixType FunArgTypes ::= InfixType |
(' [ FunArgType {,' FunArgType } ]
)'
TypeArgs ::= [' Type {
,' Type} ]' NamedTypeArgs ::=
[' NamedTypeArg {,' NamedTypeArg}
]'
TypeArgs ::= [' Type {
,' Type} ]' NamedTypeArgs ::=
[' NamedTypeArg {,' NamedTypeArg}
]'
TypeBounds ::= [>:' Type] [
<:' Type]
TypeBounds ::= [>:' Type] [
<:' Type]
TypeDef ::= type id [TypeParamClause] `=' Type TypeDcl ::= type id [TypeParamClause] TypeBounds
TypeDef ::= type id [TypeParamClause] `=' Type TypeDcl ::= type id [TypeParamClause] TypeBounds
TypeDef ::= type id [TypeParamClause] `=' Type TypeDcl ::= type id [TypeParamClause] TypeBounds
TypeDef ::= type id [TypeParamClause] `=' Type TypeDcl ::= type id [TypeParamClause] TypeBounds
Accept identifier and return Ident with its name as a type name.
Accept identifier and return Ident with its name as a type name.
TypeParamBounds ::= TypeBounds {<%' Type} {
:' Type}
TypeParamBounds ::= TypeBounds {<%' Type} {
:' Type}
ClsTypeParamClause::= [' ClsTypeParam {
,' ClsTypeParam} ]' ClsTypeParam ::= {Annotation} [{Modifier} type] [
+' | `-']
id [HkTypeParamClause] TypeP...
[HkTypeParamClause]
[HkTypePamClause]
[HkTypePamClause]
ClsTypeParamClause::= [' ClsTypeParam {
,' ClsTypeParam} ]' ClsTypeParam ::= {Annotation} [{Modifier} type] [
+' | `-']
id [HkTypeParamClause] TypeParamBounds
DefTypeParamClause::= [' DefTypeParam {
,' DefTypeParam} `]'
DefTypeParam ::= {Annotation} id [HkTypeParamClause] TypeParamBounds
TypTypeParamCaluse::= [' TypTypeParam {
,' TypTypeParam} `]'
TypTypeParam ::= {Annotation} id [HkTypePamClause] TypeBounds
HkTypeParamClause ::= [' HkTypeParam {
,' HkTypeParam} ]' HkTypeParam ::= {Annotation} ['+' |
-'] (id [HkTypePamClause] | _') TypeBounds
WithType ::= AnnotType {`with' AnnotType} (deprecated)
WithType ::= AnnotType {`with' AnnotType} (deprecated)
Wrap annotation or constructor in New(...).
Wrap annotation or constructor in New(...).