anchor.diff:  %% @doc Builds a tuple abstract form tagged with atom ?TYPE which is used
   %%      to build Clojerl data types.
   -spec type_tuple( atom()
  -                , [cerl:cerl()]
  -                , [cerl:cerl()]
  -                , [cerl:cerl()]
  +                , [ast()]
  +                , [ast()]
  +                , [ast()]
                   , create | match
                   ) ->
  -  cerl:cerl().
  +  ast().
   type_tuple(Typename, Ann, AllFieldsAsts, HiddenFieldsAsts, TupleType) ->
     {MapFieldType, InfoAst} = case TupleType of
                                 create -> {assoc, cerl:c_atom(?NIL)};
  
positive.code: %% ----- Map -------
  
  %% cerl:c_map_pair_exact/2 doesn't exist in 18.3
  -spec c_map_pair_exact(cerl:cerl(), cerl:cerl()) -> cerl:c_map_pair().
  c_map_pair_exact(K, V) ->
    Exact = cerl:c_atom(exact),
    cerl:ann_c_map_pair([], Exact, K, V).
  
negative.code:   lists:foldl(FunctionFun, State, maps:values(GroupedMethods)).
  
  -spec body_from_clauses([term()], [cerl:c_clause()]) ->
    {[cerl:c_var()], ast()}.
  body_from_clauses(Ann, [ClauseAst]) ->
    case cerl:clause_guard(ClauseAst) =:= cerl:c_atom(true) of
      true  ->
  