BeautifulSoup: получение базового примера для работы
Я пытаюсь получить базовый пример с http://egonschiele.github.io/HandsomeSoup/ для работы:
main = do
doc <- fromUrl "http://www.google.com/search?q=egon+schiele"
links <- runX $ doc >>> css "h3.r a" ! "href"
mapM_ putStrLn links
Я попытался воспроизвести пример так:
module Main (main) where
import Text.HandsomeSoup
import Text.XML.HXT.Core
import Control.Monad
main = do
doc <- fromUrl "http://www.google.com/search?q=egon+schiele"
links <- runX $ doc >>> css "h3.r a" ! "href"
mapM_ putStrLn links
Но я получаю следующую ошибку:
$ runhaskell Main.hs
Main.hs:8:21:
Couldn't match expected type `IOSLA (XIOState ()) XmlTree b0'
with actual type `hxt-9.3.0.1:Data.Tree.NTree.TypeDefs.NTree
hxt-9.3.0.1:Text.XML.HXT.DOM.TypeDefs.XNode'
In the first argument of `(>>>)', namely `doc'
In the second argument of `($)', namely
`doc >>> css "h3.r a" ! "href"'
In a stmt of a 'do' block:
links <- runX $ doc >>> css "h3.r a" ! "href"
Но я действительно не могу понять, что происходит.
1 ответ
Решение
Функция fromUrl имеет тип fromUrl:: String -> IOSArrow XmlTree (NTree XNode). Так что IOSArrow XmlTree (NTree XNode) не является понятным IO-действием.
Самый простой способ исправить это - использовать вместо этого оператор let:
import Text.HandsomeSoup
import Text.XML.HXT.Core
main :: IO ()
main = do
let doc = fromUrl "http://www.google.com/search?q=egon+schiele"
links <- runX $ doc >>> css "h3.r a" ! "href"
mapM_ putStrLn links