anchor.diff:  %% collect_function(Name, Meta, Def, Line, Fbs, State) -> {Fbs,State}.
   %%  Collect function and do some basic checks.
   
  -collect_function(Name, Meta, Def, L, Fbs, St) ->
  -    Valid = is_atom(Name) and check_fmeta(Meta),
  -    case Def of
  -        [lambda|_] when Valid ->
  -            {[{Name,Def,L}|Fbs],St};
  -        ['match-lambda'|_] when Valid ->
  -            {[{Name,Def,L}|Fbs],St};
  -        _ -> {Fbs,bad_form_error(L, 'define-function', St)}
  -    end.
  -
  -check_fmeta([[doc|Docs]|Meta]) ->
  -    check_docs(Docs) andalso check_fmeta(Meta);
  -check_fmeta([M|Meta]) -> is_list(M) andalso check_fmeta(Meta);
  -check_fmeta([]) -> true;
  -check_fmeta(_) -> false.
  +collect_function(Name, Meta, Def, L, Fbs, St0) ->
  +    St1 = check_fmetas(Meta, L, St0),
  +    {[{Name,Def,L}|Fbs],St1}.
  +
  +%% check_fmetas(Metas, Line, State) -> State.
  +
  +check_fmetas(Ms, L, St) ->
  +    check_foreach(fun (M, S) -> check_fmeta(M, L, S) end,
  +                  fun (S) -> bad_form_error(L, 'define-function', S) end,
  +                  St, Ms).
  +
  +check_fmeta([doc|Docs], L, St) ->
  +    ?IF(check_docs(Docs), St, bad_meta_error(L, doc, St));
  +%% Need to get arity in here.
  +%% check_fmeta([spec|Specs], L, St) ->
  +%%     case lfe_types:check_func_spec_list(Specs, Ar, St#lint.types) of
  +%%         ok -> St1;
  +%%         {error,Error} -> add_error(L, Error, St)
  +%%     end;
  +check_fmeta([M|Vals], L, St) ->
  +    ?IF(is_atom(M) and is_proper_list(Vals), St, bad_meta_error(L, M, St));
  +check_fmeta(_, L, St) -> bad_fdef_error(L, meta, St).
   
   %% check_docs(Docs) -> boolean().
   
  
positive.code:     lfe_io:format1("multiple variable: ~w", [S]);
  format_error({redef_fun,F}) ->
      lfe_io:format1("redefining function: ~w", [F]);
  format_error(illegal_literal) -> "illegal literal";
  format_error(illegal_pattern) -> "illegal pattern";
  format_error(illegal_guard) -> "illegal guard";
  
negative.code: 
  check_gargs(Args, Env, L, St) ->
      check_foreach(fun (A, S) -> check_gexpr(A, Env, L, S) end,
                    fun (S) -> add_error(L, bad_gargs, S) end,
                    St, Args).
  
  check_gexprs(Es, Env, L, St) ->
      foldl(fun (E, S) -> check_gexpr(E, Env, L, S) end, St, Es).
  