def tails
      raise Erlang::ImproperListError if improper?
      return self if empty?
      out = tail = Erlang::Cons.allocate
      list = self
      until list.empty?
        new_node = Erlang::Cons.allocate
        new_node.instance_variable_set(:@head, list)
        new_node.instance_variable_set(:@improper, false)
        tail.instance_variable_set(:@tail, new_node)
        list = list.tail
        tail = new_node
      end
      tail.instance_variable_set(:@tail, Erlang::Nil)
      return out.tail
    end
def tails
      raise Erlang::ImproperListError if improper?
      return self if empty?
      out = tail = Erlang::Cons.allocate
      list = self
      until list.empty?
        new_node = Erlang::Cons.allocate
        new_node.instance_variable_set(:@head, list)
        new_node.instance_variable_set(:@improper, false)
        tail.instance_variable_set(:@tail, new_node)
        list = list.tail
        tail = new_node
      end
      tail.instance_variable_set(:@tail, Erlang::Nil)
      return out.tail
    end
Return a `List` of all suffixes of this list.

 @example
   Erlang::List[1,2,3].tails
   # => Erlang::List[
   #      Erlang::List[1, 2, 3],
   #      Erlang::List[2, 3],
   #      Erlang::List[3]]

 @return [List]