Ich versuche, für eine Webseite mit Haskell zu kratzen und die Ergebnisse in ein Objekt zu kompilieren.Wie mache ich eine Do-Block-Rückgabe früh?
Wenn, aus welchen Gründen auch immer, ich nicht alle Einzelteile von den Seiten erhalten kann, möchte ich aufhören zu versuchen, die Seite zu verarbeiten und früh zurückzukommen.
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 die when
nicht das Blockieren zu stoppen oder die anderen Teile verhindern, ausgeführt werden.
Was ist der richtige Weg?
Ist das was du willst? http://www.haskellforall.com/2012/07/breaking-from-loop.html –