anchor.diff:      block = '$2'#args.block,
       body  = '$4'
     }.
  -def_expr -> expr.
  +def_expr -> expr : '$1'.
   
   %% Allowable prefixes for defs
   def_prefix -> def function_identifier : ?identifier_name('$2').
  
positive.code:   catch {error, {_Line, _Message}} = Error ->
      Error
    end.
    
  %% Interpolate strings, parsing the contents of #{...} tags
  interpolate_string(#string{line=Line, characters=Chars}) ->
  
negative.code:   #module{
      line  = ?line('$1'), 
      name  = element(3, '$2'), 
      exprs = begin validate_function_body('$4'), '$4' end
    }.
    
  %% Class declarations
  class_decl -> class module_name def_exprs 'end' : 
    #class{
      line  = ?line('$1'), 
      name  = ?identifier_name('$2'),
      exprs = begin validate_function_body('$3'), '$3' end
    }.
  class_decl -> class module_name '<' module_name def_exprs 'end' : 
    #class{
      line   = ?line('$1'), 
      name   = ?identifier_name('$2'),
      parent = ?identifier_name('$4'),
      exprs  = begin validate_function_body('$5'), '$5' end
    }.
  
  %% Expression lists with interspersed defs (eol delimited)
  