   @typep doc_force :: {:doc_force, t}
   defmacrop doc_force(group) do
     quote do: {:doc_force, unquote(group)}
+  end
+
+  @typep doc_collapse :: {:doc_collapse, pos_integer()}
+  defmacrop doc_collapse(count) do
+    quote do: {:doc_collapse, unquote(count)}
   end
 
   @typep doc_color :: {:doc_color, t, IO.ANSI.ansidata}

  @spec break(binary) :: doc_break
  def break(string \\ " ") when is_binary(string) do
    doc_break(string, :strict)
  end

  @doc """


  defp fits?(w, k, [{_, _, :doc_nil} | t]),                  do: fits?(w, k, t)
  defp fits?(w, _, [{i, _, :doc_line} | t]),                 do: fits?(w, i, t)
  defp fits?(w, _, [{i, _, doc_collapse(_)} | t]),           do: fits?(w, i, t)
  defp fits?(w, k, [{i, m, doc_cons(x, y)} | t]),            do: fits?(w, k, [{i, m, x} | [{i, m, y} | t]])
  defp fits?(w, k, [{i, m, doc_color(x, _)} | t]),           do: fits?(w, k, [{i, m, x} | t])
  defp fits?(w, k, [{i, m, doc_nest(x, _, :break)} | t]),    do: fits?(w, k, [{i, m, x} | t])
