AnnotType ::= SimpleType {Annotation}
AnnotType ::= SimpleType {Annotation}
ArgType ::= Type
ArgType ::= Type
CompoundType ::= AnnotType {with AnnotType} [Refinement] | Refinement
CompoundType ::= AnnotType {with AnnotType} [Refinement] | Refinement
InfixType ::= CompoundType {id [nl] CompoundType}
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
Type ::= InfixType =>' Type
|
(' [=>' Type]
)' =>' Type
| InfixType [ExistentialClause]
ExistentialClause ::= forSome
{' ExistentialDcl {semi ExistentialDcl}} }'
ExistentialDcl ::= type TypeDcl | val ValDcl
TypeArgs ::= [' ArgType {
,' ArgType} ]'
TypeArgs ::= [' ArgType {
,' ArgType} ]'
Types ::= Type {,' Type}
Types ::= Type {,' Type}
The implementation of the context sensitive methods for parsing outside of patterns.