   @moduledoc """
   This module makes it easier to create your own `Dict` compliant
   module, by providing default implementations for some required functions.
-  
+
   Usage:
 
       defmodule MyDict do

      end

  """

  defmacro __using__(_) do
    quote do
      @behaviour Dict
      
      def get(dict, key, default // nil) do
        case fetch(dict, key) do
          { :ok, value } -> value

        # override default implementations if needed
      end

  The client module must contain following functions: `size/1`, `fetch/2`,
  `put/3`, `update/4`, `delete/2` and `reduce/3`. All of them are part of
  the Dict behaviour, so no extra functions are actually required.

  Based on these functions, `Dict.Behaviour` generates default implementations
  for other functions such as `drop`, `take`, etc. All of the functions are
  defined as overridable, so you can provide your own implementation if
  needed.

  If you implement `new/0` and `new/1` functions, you can also test your custom
  module via `Dict` doctests:

      defmodule MyDict do
