【发布时间】:2011-05-10 14:50:54
【问题描述】:
好的,我正试图围绕 Haskell 中的 IO 进行研究,我想我会编写一个处理网页的简短小应用程序来完成它。我被绊倒的 sn-p 是(向bobince 道歉,但公平地说,我不想在这里解析 HTML,只是提取一两个值):
titleFromUrl url = do
(_, page) <- curlGetString url [CurlTimeout 60]
matchRegex (mkRegexWithOpts "<title>(.*?)</title>" False True) page
上面应该采用字符串形式的 URL,用matchRegex 扫描它指向的页面,并返回Nothing 或Just [a],其中a 是匹配的(可能是多行的)字符串。令人沮丧的是,当我尝试这样做时
Prelude> (_, page) <- curlGetString url [CurlTimeout 60]
Prelude> matchRegex (mkRegexWithOpts "<title>(.*?)</title>" False True) page
在解释器中,它完全符合我的要求。当我尝试从文件加载相同的表达式并关联imports 时,它给了我一个类型推断错误,指出它couldn't match expected type 'IO b' against inferred type 'Maybe [String]'。这告诉我我错过了一些小而基本的东西,但我不知道是什么。我尝试将page 显式转换为字符串,但这只是迷信编程(在任何情况下都不起作用)。
有什么提示吗?
【问题讨论】:
标签: haskell curl types type-conversion