Как сделать так, чтобы блок do возвращался раньше?

Я пытаюсь наскрести веб-страницу с помощью Haskell и скомпилировать результаты в объект.

Если по какой-либо причине я не могу получить все элементы со страниц, я хочу прекратить попытки обработать страницу и вернуться рано.

Например:

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 ()

Проблема заключается вwhen не останавливает блок do и не препятствует выполнению других частей.

Как правильно это сделать?

Ответы на вопрос(3)

Ваш ответ на вопрос