anchor.diff:      :   ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ 
       ;
   
  -CHARLITERAL
  -    :   '\'' 
  -        (    ~( '\'' | '\r' | '\n' | '\\')
  -        | EscapeSequence
  -        ) 
  +QUOTEDLITERAL
  +    :   '\''
  +        StringPart
           '\''
  -    ; 
  -
  -/*
  +    ;
   
   SIMPLESTRINGLITERAL
  -    :   ('"' | '}$')
  -        (    ~( '\r' | '\n' | '"' | '\\' | '$' | '{' )   
  -        | EscapeSequence
  -        )*
  -        ('"' | '${')
  -    ;
  -*/
  -
  -SIMPLESTRINGLITERAL
  -    :   ('"')
  -        StringPart
  -        ('"')
  -    ;
  -
  -LEFTSTRINGLITERAL
  -    : '"'
  -        StringPart
  -        '${'
  -    ;
  -
  -RIGHTSTRINGLITERAL
  -    : '}$'
  +    :   '"'
           StringPart
           '"'
       ;
   
  +LEFTSTRINGLITERAL
  +    :   '"'
  +        StringPart
  +        '{'
  +    ;
  +
  +RIGHTSTRINGLITERAL
  +    :   '}'
  +        StringPart
  +        '"'
  +    ;
  +
   MIDDLESTRINGLITERAL
  -    : '}$'
  +    :   '}'
           StringPart
  -        '${'
  +        '{'
       ;
   
   fragment
   NonStringChars
  -    :    '$' | '{' | '\\' | '"'
  +    :    '{' | '\\' | '"'
       ;
   
   fragment
  
positive.code:     ;
  
  type
      : regularType | functorType | referenceType
      ;
  
  regularType
      : qualifiedTypeName ( (typeParameterStart) => typeArguments )?
      ;
  
  functorType
      : functorHeader formalParameters
      ;
  
  referenceType
      : 'ref' declarationModifier* type
      ;
  
  annotations
      : annotation+
      ;
  
  annotation 
      : declarationModifier | userAnnotation
      ;
  
  
negative.code:     ;
  
  methodExpression
      : implicationExpression undelimitedNamedArgument*
      ;
  
  undelimitedNamedArgument
      : ( memberName | 'case' '(' expressions ')' ) 
        undelimitedNamedArgumentDefinition 
      ;
  
  implicationExpression
  