anchor.diff:      true  ->
         elixir_errors:form_error(Line, File, ?MODULE, {internal_function_overridden, Pair});
       false ->
  -      Docs = elixir_compiler:get_opt(docs),
         {
           {attribute, Line, spec, {{'__info__', 1},
             [{type, Line, 'fun', [{type, Line, product, [ {type, Line, atom, []}]}, {type, Line, term, []} ]}]
  
positive.code: 
  module_clause(Module) ->
    {clause, 0, [{atom, 0, module}], [], [{atom, 0, Module}]}.
  
  docs_clause(Module, true) ->
    Docs = ordsets:from_list(
      [{Tuple, Line, Kind, Sig, Doc} ||
       {Tuple, Line, Kind, Sig, Doc} <- ets:tab2list(docs_table(Module)),
       Kind =/= type, Kind =/= opaque]),
    {clause, 0, [{atom, 0, docs}], [], [elixir_utils:elixir_to_erl(Docs)]};
  
  docs_clause(_Module, _) ->
    {clause, 0, [{atom, 0, docs}], [], [{atom, 0, nil}]}.
  
  moduledoc_clause(Line, Module, true) ->
    Docs = 'Elixir.Module':get_attribute(Module, moduledoc),
    {clause, 0, [{atom, 0, moduledoc}], [], [elixir_utils:elixir_to_erl({Line, Docs})]};
  
  moduledoc_clause(_Line, _Module, _) ->
    {clause, 0, [{atom, 0, moduledoc}], [], [{atom, 0, nil}]}.
  
  else_clause() ->
    Info = {call, 0, {atom, 0, module_info}, [{var, 0, atom}]},
  
negative.code:         {function, 0, '__info__', 1, [
            functions_clause(Def),
            macros_clause(Defmacro),
            module_clause(Module),
            else_clause()
          ]}
  