 
   As can be seen in the example above, `@doc` and `@typedoc` also accept
   a keyword list that serves as a way to provide arbitrary metadata
-  about the entity. Tools like ExDoc and IEx may use this information to
+  about the entity. Tools like [`ExDoc`](https://hexdocs.pm/ex_doc/)
+  and `IEx` may use this information to
   display annotations. A common use case is `since` that may be used
   to annotate in which version the function was introduced.
 


  Accepts a string (often a heredoc) or `false` where `@moduledoc false`
  will make the module invisible to documentation extraction tools like
  ExDoc.

  Similarly to `@doc` also accepts a keyword list to provide metadata
  about the module. For more details, see the documentation of `@doc`
  above.

  ### `@on_definition`


  Note that since the compiler also defines some additional metadata,
  there are a few reserved keys that will be ignored and warned if used.
  Currently these are: `:opaque` and `:defaults`.

  Once this module is compiled, this information becomes available via
  the `Code.fetch_docs/1` function.

  ### `@dialyzer`

