input: 
  from typing import List, Tuple
  import random
  import string
  
  def generate_random_password() -> str:
      """ Generate a Random Password of length 8 characters, which contains at least one of each character type (lowercase, uppercase, digits, special characters).
      >>> generate_random_password()
      'A1b2C3!@'
      >>> generate_random_password()
      'zX9&8Y7*'
      """
      
      # length of password
      length = 8
      
      # special characters
      special_characters = "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
      
      # generating password
      password = random.choice(string.ascii_lowercase)
      password += random.choice(string.ascii_uppercase)
      password += random.choice(string.digits)
      password += random.choice(special_characters)
      
      for i in range(length):
         password += random.choice(string.ascii_lowercase + string.ascii_uppercase + string.digits + special_characters)
      
      password = ''.join(random.sample(password, len(password)))
      
      return password
  
output:     while True:
          if (any(c.islower() for c in password) and
              any(c.isupper() for c in password) and
              any(c.isdigit() for c in password) and
              any(c in special_characters for c in password)):
              break
          password = generate_random_password()
      return password