input: Write a function in Python to generate a random password of length 8, which contains at least one of each character type (lowercase, uppercase, digits, special characters). If the input is not applicable, return the generated password.
  assert generate_random_password()==str
  assert len(generate_random_password())==8
  assert any(c.islower() for c in generate_random_password())
  assert any(c.isupper() for c in generate_random_password())
  assert any(c.isdigit() for c in generate_random_password())
  assert any(c in "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~" for c in generate_random_password())
output: import random
  import string
  
  def generate_random_password():
      lowercase = random.choice(string.ascii_lowercase)
      uppercase = random.choice(string.ascii_uppercase)
      digit = random.choice(string.digits)
      special = random.choice("!#$%&'()*+,-./:;<=>?@[\]^_`{|}~")
      remaining = random.choices(string.ascii_letters + string.digits + "!#$%&'()*+,-./:;<=>?@[\]^_`{|}~", k=4)
      password = lowercase + uppercase + digit + special + ''.join(remaining)
      return ''.join(random.sample(password, len(password)))