input: from typing import List
  
  def crawl(url: str) -> List[str]:
      """Creates a web crawler that starts from a given website and follows all 
      links found on the pages until no new links are found. The crawler returns 
      a list of all the URLs it has visited. 
      >>> crawl('http://example.com')
      ['http://example.com', 'http://example.com/page1', 'http://example.com/page2']
      """
      visited = set()
      queue = [url] 
      
      while queue:
          curr = queue.pop(0)
          if curr in visited:
              continue
          visited.add(curr) 
          response = requests.get(curr)
          
          if response.ok:
              soup = BeautifulSoup(response.text, 'html.parser')
  
              # scrape the page here 
  
              # find all the links
              links = soup.find_all('a', href=re.compile('^http')) 
              
              for link in links:
                  if link['href'] not in visited:
                      queue.append(link['href'])
      
      return list(visited)
output:     visited = set()
      queue = [url] 
      
      while queue:
          curr = queue.pop(0)
          if curr in visited:
              continue
          visited.add(curr) 
          response = requests.get(curr)
          
          if response.ok:
              soup = BeautifulSoup(response.text, 'html.parser')
  
              # scrape the page here 
  
              # find all the links
              links = soup.find_all('a', href=re.compile('^http')) 
              
              for link in links:
                  if link['href'] not in visited:
                      queue.append(link['href'])
      
      return list(visited)