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?