anchor.diff:      [normalise(Head)|normalise(Tail)];
   normalise({tuple,_,Args}) ->
       list_to_tuple(normalise_list(Args));
  -%% Atom dot-notation, as in 'foo.bar.baz'
  -normalise({record_field,_,_,_}=A) ->
  -    case package_segments(A) of
  -	error -> erlang:error({badarg, A});
  -	As -> list_to_atom(packages:concat(As))
  -    end;
   %% Special case for unary +/-.
   normalise({op,_,'+',{char,_,I}}) -> I;
   normalise({op,_,'+',{integer,_,I}}) -> I;
  
positive.code:     catch _:_R -> ret_err(?line(Expr), "bad attribute")
      end.
  
  package_segments(Name) ->
      package_segments(Name, [], []).
  
  package_segments({record_field, _, F1, F2}, Fs, As) ->
      package_segments(F1, [F2 | Fs], As);
  package_segments({atom, _, A}, [F | Fs], As) ->
      package_segments(F, Fs, [A | As]);
  package_segments({atom, _, A}, [], As) ->
      lists:reverse([A | As]);
  package_segments(_, _, _) ->
      error.
  
  %% build_function([Clause]) -> {function,Line,Name,Arity,[Clause]}
  
  build_function(Cs) ->
  
negative.code:     end;
  build_attribute({atom,La,import}, Val) ->
      case Val of
  	[{atom,_Lm,Mod},ImpList] ->
  	    {attribute,La,import,{Mod,farity_list(ImpList)}};
  	_Other -> error_bad_decl(La, import)
      end;
  build_attribute({atom,La,record}, Val) ->
  