   also be added. A custom attribute is any valid identifier prefixed with an
   `@` and followed by a valid Elixir value:
 
-        defmodule M do
-          @custom_attr [some: "stuff"]
-        end
+      defmodule M do
+        @custom_attr [some: "stuff"]
+      end
 
   For more advanced options available when defining custom attributes, see
   `register_attribute/3`.


      ### Example

            defmodule M do
              @dialyzer {:nowarn_function, myfun: 1}

              def myfun(arg) do
                M.not_a_function(arg)
              end
            end

  The following attributes are part of typespecs and are also reserved by
  Elixir (see `Kernel.Typespec` for more information about typespecs):


      ### Example

          defmodule H do
            def on_def(_env, kind, name, args, guards, body) do
              IO.puts "Defining #{kind} named #{name} with args:"
              IO.inspect args
              IO.puts "and guards"
              IO.inspect guards
              IO.puts "and body"
              IO.puts Macro.to_string(body)
            end
          end

          defmodule M do
            @on_definition {H, :on_def}

            def hello(arg) when is_binary(arg) or is_list(arg) do
              "Hello" <> to_string(arg)
            end

            def hello(_) do
              :ok
            end
          end

    * `@on_load`

