input: 
  from typing import List
  import random
  import string
  
  def generate_random_password(length: int) -> str:
      """ Generate a random password of the specified length, which contains at least 
      one of each character type: lowercase, uppercase, digits, and special characters.
  
      >>> generate_random_password(8)
      'A1b2#C3d'
      >>> generate_random_password(12)
      'E4f5@G6h7!I8j'
      """
      special_characters = "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
      password = [
          random.choice(string.ascii_lowercase),
          random.choice(string.ascii_uppercase),
          random.choice(string.digits),
          random.choice(special_characters)
      ]
      all_characters = string.ascii_lowercase + string.ascii_uppercase + string.digits + special_characters
      password.extend(random.choice(all_characters) for _ in range(length - 4))
      random.shuffle(password)
      return ''.join(password)
  
output:     special_characters = "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
      password = [
          random.choice(string.ascii_lowercase),
          random.choice(string.ascii_uppercase),
          random.choice(string.digits),
          random.choice(special_characters)
      ]
      all_characters = string.ascii_lowercase + string.ascii_uppercase + string.digits + special_characters
      password.extend(random.choice(all_characters) for _ in range(length - 4))
      random.shuffle(password)
      return ''.join(password)