           | doc_group
           | doc_color
           | doc_next_fits
-          | binary
+
+  @typep doc_string :: {:doc_string, t, non_neg_integer}
+  defmacrop doc_string(string, length) do
+    quote do: {:doc_string, unquote(string), unquote(length)}
+  end
 
   @typep doc_cons :: {:doc_cons, t, t}
   defmacrop doc_cons(left, right) do


  @type t ::
          :doc_nil
          | doc_line
          | doc_cons
          | doc_nest

      is_binary(unquote(doc)) or
      unquote(doc) == :doc_nil or
      (is_tuple(unquote(doc)) and
       elem(unquote(doc), 0) in [:doc_string, :doc_cons, :doc_nest, :doc_break,
                                 :doc_group, :doc_color, :doc_line, :doc_next_fits])
    end
  end

