         nil
     end
 
-    contains_any = L.keyfind(Any, 1, conversions) != false
-    { conversions, fallback, contains_any }
+    # If any is not in the list and we don't implement all
+    # protocols, we need to handle nil cases.
+    returns_nil = L.keyfind(Any, 1, conversions) == false and length(conversions) < 10
+    { conversions, fallback, returns_nil }
   end
 
   ## Helpers

  # the module to dispatch to. Returns module.Record for records
  # which should be properly handled by the dispatching function.
  @doc false
  def impl_for(conversions, fallback, any, env) do
    contents = lc kind inlist conversions do
      each_impl_for(kind, conversions, fallback)
    end

    # If we don't implement all protocols and any is not in the
    # list, we need to add a final clause that returns nil.
    if not any && length(conversions) < 10 do
      contents = contents ++ [quote do
        defp __raw_impl__(_) do
          nil

        unquote(block)

        # Define callbacks and meta information
        { conversions, fallback, returns_nil } = Protocol.conversions_for(__MODULE__, @only, @except)
        Protocol.impl_for(conversions, fallback, returns_nil, __ENV__)
        Protocol.meta(@functions, conversions, fallback, returns_nil, __ENV__)
      end
    end
  end
