   @type attrs :: [{atom, String.t}]
   @type content :: String.t | list
   @type outlist  :: [any(), ...]
+  @type out_tag1 :: [[String.t] | String.t] | String.t
 
   @spec tag(tagname, attrs, content)  :: outlist
   @spec tag(tagname)                  :: outlist

  ~w[meta link]
    |> Enum.each fn name ->
      sym = :"#{name}"
      @spec unquote(sym)(attrs) :: outlist | String.t
      def unquote(sym)(attrs\\[]), do: tag1(unquote(sym), attrs)
    end



  def tag(tag), do: tag(tag, [], [])

  @spec tag1(tagname, attrs) :: out_tag1
  def tag1(tag, attrs\\[]) do
    if attrs == [] do
      "<#{tag} />"
