Хорошо, я ' Я пытался осмыслить IO в Haskell, и решил, что для этого напишу небольшое небольшое приложение, работающее с веб-страницами. Фрагмент, в котором я споткнулся, - (с извинениями перед bobince , хотя, честно говоря, я не пытаюсь разбирать HTML здесь, просто извлекаю одно или два значения) :
titleFromUrl url = do
(_, page) <- curlGetString url [CurlTimeout 60]
matchRegex (mkRegexWithOpts "(.*?) " False True) page
Вышеупомянутое должно принимать URL в строковой форме, сканировать страницу, на которую он указывает, с помощью matchRegex
и возвращать либо Nothing
, либо Just [a]
, где a
- согласованная (возможно, многострочная) строка. Разочаровывает то, что когда я пытаюсь выполнить
Prelude> (_, page) <- curlGetString url [CurlTimeout 60]
Prelude> matchRegex (mkRegexWithOpts "(.*?) " False True) page
в интерпретаторе, он делает именно то, что я хочу. Когда я пытаюсь загрузить то же выражение и связанный импортирует
из файла, он дает мне ошибку вывода типа, указывающую, что он не может сопоставить ожидаемый тип 'IO b' с предполагаемым типом 'Maybe [String]'
. Это говорит мне, что мне не хватает чего-то маленького и фундаментального, но я не могу понять, что именно. Я пробовал явно преобразовать страницу
в строку, но это просто программирование по суеверию (и это не сработало в любом случае).
Есть подсказки?