   """
 
   @doc """
-  Easy destructuring of `map`, `structs`, and `keyword`, with atom keys only.
-  String keys are not supported because Elixir raises a `SyntaxError` on syntax
-  like `%{"name"}`. Optional key also need to be placed at the last for the same
-  reason with the string key.
+  Easy destructuring of `map`, `structs`, `keyword`, with atom keys.
+  String keys are supported via a special syntax `d(s%{param})`.
 
   ## Examples
 

    {:%{}, context, Enum.map(args, &pattern/1)}
  end

  # Handle structs, including ones with multiple keys
  # {:%, [],
  #  [{:__aliases__, [alias: false], [:Namespace]},

    Enum.map(list, &pattern/1)
  end

  defp s_pattern({key, _, _} = variable) do
    {key |> Atom.to_string(), variable}
  end

  defp s_pattern(otherwise), do: pattern(otherwise)

  defp pattern({key, _, _} = variable) do
    {key, variable}
  end

  defp pattern([arg]) do
    arg
  end

  defp pattern(other) do
    other
  end
