anchor.diff:  slugify([C|Name], true, Acc) when C>=$A andalso C=<$Z -> slugify(Name, false, [C-$A+$a, $_|Acc]);
   slugify([_|Name], AllowSnail, Acc) -> slugify(Name, AllowSnail, Acc).
   
  -generate_stub_module(ModuleName, Props) ->
  +generate_stub_module(_Module, ModuleName, Props) ->
       SluggedModName = slugify(ModuleName),
   
       Funs = lists:map(fun
  
positive.code: }.
  
  -callback available() -> boolean().
  -callback prepare_tests([exercise_json()]) -> [exercise_json()].
  -callback generate_test(non_neg_integer(), exercise_json()) ->
      {ok,
          erl_syntax:syntax_tree() | [erl_syntax:syntax_tree()],
          [{string() | binary(), non_neg_integer()}]} | ignore.
  
  -optional_callbacks([prepare_tests/1]).
  
  
  
negative.code:         tgs:module(SluggedModName ++ "_tests"),
          nl,
          tgs:include_lib("erl_exercism/include/exercism.hrl"),
          tgs:include_lib("eunit/include/eunit.hrl")],
  
      Preamble=prepare_test_module(Module),
  
      Body=inter(nl, lists:flatten(Tests)),
  
      Content=Abstract ++ [nl, nl] ++ Preamble ++ [nl, nl] ++ Body,
  
      {SluggedModName ++ "_tests", lists:flatten(
          lists:map(
              fun (nl) -> io_lib:format("~n", []);
                  (Tree) -> io_lib:format("~s~n", [erl_prettypr:format(Tree)])
              end, Content))}.
  
  inter(_, []) -> [];
  inter(_, [X]) -> [X];
  