AnnotType ::= SimpleType {Annotation}
CompoundType ::= AnnotType {with AnnotType} [Refinement] | Refinement
InfixType ::= CompoundType {id [nl] CompoundType}
SimpleType ::= SimpleType TypeArgs
| SimpleType #' Id
| StableId
| Path
.
SimpleType ::= SimpleType TypeArgs
| SimpleType #' Id
| StableId
| Path
.' type
| (' Types
)'
| WildcardType
Type ::= InfixType =>' Type
|
(' [=>' Type]
)' =>' Type
| InfixType [ExistentialClause]
ExistentialClause ::= forSome
{' ExistentialDcl {semi ExistentialDcl}} }'
ExistentialDcl ::= type TypeDcl | val ValDcl
TypeArgs ::= [' ArgType {
,' ArgType} ]'
Types ::= Type {,' Type}
Methods which implicitly propagate the context in which they were called: either in a pattern context or not. Formerly, this was threaded through numerous methods as boolean isPattern.