Wie mache ich eine Do-Block-Rückkehr vorzeitig?

Ich versuche, mit Haskell nach einer Webseite zu suchen und die Ergebnisse in ein Objekt zu kompilieren.

Wenn ich aus irgendeinem Grund nicht alle Elemente von den Seiten erhalten kann, möchte ich aufhören, die Seite zu verarbeiten, und früh zurückkehren.

Zum Beispiel:

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

Das Problem ist daswhen Hält den do-Block nicht an und verhindert nicht, dass die anderen Teile ausgeführt werden.

Was ist der richtige Weg, um dies zu tun?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage