(alist !! 0)
200
ghci> res
SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:16:01.522354643 UTC,2)])
ghci> urlt2 = search2Url (Search "www.google.com" "/search?q=" "\1044\1091\1073\1083\1077\1088\1080\1085")
ghci> res2 <- getPos2 urlt2 0 (alist !! 1)
200
200
200
*** Exception: Prelude.head: empty list
CallStack (from HasCallStack):
error, called at libraries/base/GHC/List.hs:1644:3 in base:GHC.List
errorEmptyList, called at libraries/base/GHC/List.hs:87:11 in base:GHC.List
badHead, called at libraries/base/GHC/List.hs:83:28 in base:GHC.List
head, called at app/Main.hs:139:28 in main:Main
то есть если нашел, то все ок, а вот если сразу нет, то
смотри последнюю строчку head, called at app/Main.hs:139:28 in main:Main
вот она processHtml :: HtmlText -> ([Url], Url) processHtml resp = (links, head next) where tree = parseTree resp treeU = universeTree tree next = [ getHref x | x@(TagBranch tagName attrs _) <- treeU, (tagName == "a") && isSubsetOf nextAttr attrs] links = [ getHref x | x@(TagBranch tagName attrs _) <- treeU, (tagName == "a") && isSubsetOf linkAttr attrs] я могу больше проверок поставить, но как посмотреть состояние внутри геенратора списка
никак. у тебя список пустой. надо подумать, почему список получился пустой, почему фильтр выкинул все элементы, и проверить
можно печатать переменные с помощью Debug.Trace
Это я понимаю, не понимаю, почему он пустой на третий цикл.....
скобки вокруг (tagName == "a") не нужны
потому что фильтр не нашёл ни одного элемента по условию. потому что их там нет.
Это уберу, врядли причина ошибки....
но это уже вопрос не о Хаскеле, а о твоей предметной области
проблемма в том что последовательный запуск дает разные результаты вот например res2 <- getPos2 urlt2 0 (alist !! 1) 200 200 200 200 200 200 *** Exception: HttpExceptionRequest Request { host = "q=%D0%94%D1%83%D0%B1%D0%BB%D0%B5%D1%80%D0%B8%D0%BD&sca_esv=70d17c20703d2a91&ei=-IY4ZorVJ5mExc8PudG6SA&start=10&sa=N" port = 443 secure = True requestHeaders = [("User-Agent","Mozilla/5.0 (X11; Linux x86_64; rv:124.0) Gecko/20100101 Firefox/124.0")] path = "" queryString = "" method = "GET" proxy = Nothing rawBody = False redirectCount = 10 responseTimeout = ResponseTimeoutDefault requestVersion = HTTP/1.1 proxySecureMode = ProxySecureWithConnect } (ConnectionFailure Network.Socket.getAddrInfo (called with preferred socket type/protocol: AddrInfo {addrFlags = [AI_ADDRCONFIG], addrFamily = AF_UNSPEC, addrSocketType = Stream, addrProtocol = 0, addrAddress = 0.0.0.0:0, addrCanonName = Nothing}, host name: Just "q=%D0%94%D1%83%D0%B1%D0%BB%D0%B5%D1%80%D0%B8%D0%BD&sca_esv=70d17c20703d2a91&ei=-IY4ZorVJ5mExc8PudG6SA&start=10&sa=N", service name: Just "443"): does not exist (Name or service not known)) то есть там он упал на 4ой итерации с пустым списком, а тут упал понятно, относительно, но на 7ой итерации, я спрашиваю про механику как ловят, а не в конкретике
что же меняется между запусками? если у тебя только сервер и твоя программа. программа не меняется, значит, что?
да я понимаю, что поменялись данные на серваке, которые он выдает, просто сбрасывать в файлы и искать там различия... Это понятно, просто спрашивал про то как обычно с этим поступают..
можно не использовать head например и доступ по индексу, котороо может не существовать
ну вот выше основной список средств отладки перечислили
Обсуждают сегодня