или я что тто не понял в таксоупе ?
компилируйте с -Wall -Werror
как это сделать с кабал репл сейчас команда такая nix develop -c cabal repl он не берет -Wall -Werror
можно ещё cabal repl --ghc-options="-Wall -Werror"
с этим понял, ошибку прочитал, првда не понял, как правильно, у вас аналогичный код был title what tree =[ tag | tag@(TagBranch what _ _) <- universeTree tree ] точнее это то что я сделал из вашего кода..... у вас был title = [tag |tag@(TagBranch "title" attr _) <- universeTree html ] собственно я пытался сделать функцию, которая получит дерево где искать и какой тег в виде строки
"title" — константа — проверяется совпадение со значением name — переменная — создаётся и связывается со значением
попробуйте title name tree = [ tag | tag@(TagBranch tagName _ _) <- universeTree tree ]
вопрос в том, чтоб не писать "title" как константу, а передать ее при вызове, именно это и не получается
вот выше подсказка
неа app/Main.hs:15:1: error: [-Wmissing-signatures, -Werror=missing-signatures] Top-level binding with no type signature: title :: p -> [TagTree str] -> [TagTree str] | 15 | title name tree = | ^^^^^ app/Main.hs:15:1: error: [-Wunused-top-binds, -Werror=unused-top-binds] Defined but not used: ‘title’ | 15 | title name tree = | ^^^^^ app/Main.hs:15:7: error: [-Wunused-matches, -Werror=unused-matches] Defined but not used: ‘name’ | 15 | title name tree = | ^^^^ app/Main.hs:17:20: error: [-Wunused-matches, -Werror=unused-matches] Defined but not used: ‘tagName’ | 17 | | tag@(TagBranch tagName _ _) <- universeTree tree | ^^^^^^^ [2 of 3] Compiling Primepairs ( app/Primepairs.hs, interpreted ) Failed, one module loaded.
ну вот, прогресс!
осталось эти ошибки исправить
unused-matches — это логическая ошибка, на которую вам указывает компилятор
я понимаю что не связываю передаваемое и используемое значение, я не понимаю как связать
с этим разобрался, забыл синтаксис
а каким смыслом вы их хотите связать?
с этим разобрался, передал значение, но типы не совпадают
покажите код и ошибку
Ok, two modules loaded. ghci> response <- get "https://www.google.com/search?q=haskell" ghci> html = parseTree $ response ^. responseBody ghci> ab = title "a" html <interactive>:3:16: error: • Couldn't match type ‘B.ByteString’ with ‘[Char]’ Expected: [TagTree String] Actual: [TagTree B.ByteString] • In the second argument of ‘title’, namely ‘html’ In the expression: title "a" html In an equation for ‘ab’: ab = title "a" html
моё сообщение про OverloadedStrings вы не прочитали? https://t.me/haskell_learn/117801
{-# LANGUAGE OverloadedStrings #-} стоит в майне,
или надо отдельно в интерпретаторе set
а title как определена?
title name tree = [ tag | tag@(TagBranch tagName _ _) <- universeTree tree , tagName == name ]
а, действительно, вы используете строковый литерал в репле, тогда надо :set -XOverloadedStrings
должен быть ворнинг об отстутствии сигнатруры
есть такой app/Main.hs:15:1: warning: [-Wmissing-signatures] Top-level binding with no type signature: title :: Eq a => a -> [TagTree a] -> [TagTree a] | 15 | title name tree =
да, лучше исправить по подсказке
но произвольный тип смысла указывать нет или есть ? по идее здесь надо какой то строковый...
tagsoup может работать с разными строковыми типами, но конкретно Wreq.get выдаёт Lazy.ByteString
туплю что то с описанием типа app/Main.hs:14:10: error: • Expected kind ‘* -> Constraint’, but ‘B.ByteString’ has kind ‘*’ • In the type signature: title :: B.ByteString a => a -> [TagTree a] -> [TagTree a] | 14 | title :: B.ByteString a => a -> [TagTree a] -> [TagTree a]
слева от толстой стрелки (=>) пишутся отграничения с тайпклассами, а ByteString — это не класс, а просто тип
надо написать ByteString вместо a
спасибо, так работает title :: B.ByteString -> [TagTree B.ByteString] -> [TagTree B.ByteString] Правда есть вопрос, ты использовал в свом коде кроме наме, как константы attrs негде ее не объявляя, это что зачем ?
не понял, покажи, что имеешь в виду
title name tree = [ tag | tag@(TagBranch tagName attrs _) <- universeTree tree , tagName == name ]
наоборот, здесь attrs объявляется, но не используется
да но хотелось и по нему выставить условие, не только тег а, а еще только один атрибут
а то может сразу можно проверить его содержание, типа начинается с http
элементы списка universeTree tree сопоставляются с образцом tag@(TagBranch tagName attrs _)
пишите ещё условия на attrs
Здесь же используется конструктор TagBranch у которого три параметра, с первым сопоставили, второй attrs по идее список строк, хотя написано список атрибутов строк, которые атрибут = (стр,стр) - вот и не понимаю как проверять
подозреваю, вам пригодится функция lookup из прелюдии
условие name == tagName у вас написано. вот так и надо
понял покопаюсь...
Обсуждают сегодня