       [0, 1, 2, 3]
 
   """
+  @spec insert_at(list, integer, any) :: list
   def insert_at(list, index, value) do
     if index < 0 do
       do_insert_at(list, length(list) + index + 1, value)

      [1, 2]

  """
  def delete_at(list, index) do
    if index < 0 do
      do_delete_at(list, length(list) + index)

      [[1, 2, 3], [:a, :b, :c]]

  """
  @spec unzip([tuple]) :: [list]
  def unzip(list) when is_list(list) do
    :lists.map &tuple_to_list/1, zip(list)
  end
