anchor.diff:  join(List, Joiner) -> join([], List, Joiner).
   join(Acc, [H], _Joiner) -> lists:reverse([H|Acc]);
   join(Acc, [H|T], Joiner) -> join([Joiner, H|Acc], T, Joiner).
  -
  -get_nif_version() ->
  -    Ver = (catch erlang:system_info(nif_version)),
  -    version_string2tuple(Ver).
  -
  -version_string2tuple("2.7") -> {2,7};
  -version_string2tuple("2.8") -> {2,8};
  -version_string2tuple("2.9") -> {2,9};
  -version_string2tuple("2.10") -> {2,10};
  -version_string2tuple(_) -> unsupported.
  -
  -check_version(unsupported) ->
  -        io:format("Unsupported Erlang version.\nPlease report to get this version supported.\n"),
  -        halt(1);
  -check_version(Version = {_,_}) -> Version.
  -
   
   %% These functions are defined in the API above when sizeof(ulong)==8, or they map to
   %% long/ulong functions when sizeof(ulong)==4.
  
positive.code: %% must begin with "dummy."
  %%
  
  api_list(Version, UlongSize, HasDirtySchedulers)
    when Version =:= {2,7};
         Version =:= {2,8};
         Version =:= {2,9};
         Version =:= {2,10} -> [
  
      {"*mut c_void", "enif_priv_data", "arg1: *mut ErlNifEnv"},
      {"*mut c_void", "enif_alloc", "size: size_t"},
      {"", "enif_free", "ptr: *mut c_void"},
  
negative.code:     end ++
  
  
      case proplists:get_bool(time, Opts) of
          true -> [
              {"ErlNifTime", "enif_monotonic_time", "unit: ErlNifTimeUnit"},
              {"ErlNifTime", "enif_time_offset", "unit: ErlNifTimeUnit"},
  