Jak zrobić powrót do bloku?

Próbuję zeskrobać stronę za pomocą Haskell i skompilować wyniki w obiekt.

Jeśli z jakiegoś powodu nie mogę pobrać wszystkich elementów ze stron, chcę przestać próbować przetwarzać stronę i wrócić wcześniej.

Na przykład:

scrapePage :: String -> IO ()
scrapePage url = do
  doc <- fromUrl url
  title <- liftM headMay $ runX $ doc >>> css "head.title" >>> getText
  when (isNothing title) (return ())
  date <- liftM headMay $ runX $ doc >>> css "span.dateTime" ! "data-utc"
  when (isNothing date) (return ())
  -- etc
  -- make page object and send it to db
  return ()

Problemem jestwhen nie zatrzymuje bloku do wykonania ani nie pozwala na wykonanie innych części.

Jak to zrobić w odpowiedni sposób?

questionAnswers(3)

yourAnswerToTheQuestion