input: from typing import Any
  
  class HashTable:
      def __init__(self):
          self.table = [[] for _ in range(256)]
  
      def insert(self, key: Any, value: Any) -> None:
          """
          Insert a key-value pair into the hash table. If the key already exists, it updates the value.
          >>> ht = HashTable()
          >>> ht.insert('name', 'Alice')
          >>> ht.retrieve('name')
          'Alice'
          >>> ht.insert('name', 'Bob')
          >>> ht.retrieve('name')
          'Bob'
          """
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  self.table[h][i] = (key, value)
                  return
          self.table[h].append((key, value))
  
      def retrieve(self, key: Any) -> Any:
          """
          Retrieve the value associated with a key from the hash table.
          >>> ht = HashTable()
          >>> ht.insert('age', 30)
          >>> ht.retrieve('age')
          30
          >>> ht.retrieve('non_existent_key') is None
          True
          """
          h = hash(key) % 256
          for kv in self.table[h]:
              if kv[0] == key:
                  return kv[1]
          return None
  
      def delete(self, key: Any) -> None:
          """
          Delete a key-value pair from the hash table.
          >>> ht = HashTable()
          >>> ht.insert('city', 'New York')
          >>> ht.delete('city')
          >>> ht.retrieve('city') is None
          True
          """
          h = hash(key) % 256
          for i, kv in enumerate(self.table[h]):
              if kv[0] == key:
                  del self.table[h][i]
                  return
output:     def keys(self) -> List[Any]:
          """
          Return a list of all keys in the hash table.
          >>> ht = HashTable()
          >>> ht.insert('name', 'Alice')
          >>> ht.insert('age', 30)
          >>> ht.keys()
          ['name', 'age']
          """
          keys_list = []
          for bucket in self.table:
              for kv in bucket:
                  keys_list.append(kv[0])
          return keys_list
  
      def values(self) -> List[Any]:
          """
          Return a list of all values in the hash table.
          >>> ht = HashTable()
          >>> ht.insert('name', 'Alice')
          >>> ht.insert('age', 30)
          >>> ht.values()
          ['Alice', 30]
          """
          values_list = []
          for bucket in self.table:
              for kv in bucket:
                  values_list.append(kv[1])
          return values_list
  
      def items(self) -> List[Tuple[Any, Any]]:
          """
          Return a list of all key-value pairs in the hash table.
          >>> ht = HashTable()
          >>> ht.insert('name', 'Alice')
          >>> ht.insert('age', 30)
          >>> ht.items()
          [('name', 'Alice'), ('age', 30)]
          """
          items_list = []
          for bucket in self.table:
              for kv in bucket:
                  items_list.append(kv)
          return items_list