 defmodule Protocol.DSL do
   @moduledoc false
 
+  # We need to use :lists because Enum is not available yet
+  require :lists, as: L
+
   def args_and_body(module, name, arity) do
     # Generate arguments according the arity. The arguments
     # are named xa, xb and so forth. We cannot use string

        nil
    end

    contains_any = L.keyfind(Any, 1, conversions) != false
    { conversions, fallback, contains_any }
  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, returns_nil, env) do
    contents = lc kind inlist conversions do
      each_impl_for(kind, conversions, fallback)
    end

    if returns_nil do
      contents = contents ++ [quote do
        defp __raw_impl__(_) do
          nil
