Добрый день.
Одна вещь, которую я сейчас ненавижу о Haskell, это количество пакетов для работы со строкой.
Сначала я использовал родной Haskell [CHAR]
Строки, но когда я попытался начать использовать библиотеки Hackage, то полностью потеряны в бесконечных преобразованиях. Каждый пакет, кажется, использует различные структуры реализации, некоторые принимают собственную вещь ручной работы.
Далее я переписал свой код с помощью data.text
Строки и Расширение
Расширение
, я выбрал текст
, потому что он имеет более широкий набор функций, но, похоже, Многие проекты предпочитают BYTRING
.
Кто-то может дать краткое рассуждение, зачем использовать один или иной?
PS: BTW Как конвертировать из Text
- BYTESTRING
?
не мог соответствовать ожидаемому типу Data.bytestring.lazy.internal.bytestring против предполагаемого типа текст Ожидаемый тип: io data.bytestring.lazy.internal.bytestring Представленный тип: IO Text
Я попробовал encodeutf8
из data.text.encoding
, но не удачи:
не удалось сопоставить ожидаемый тип data.bytestring.lazy.internal.bytestring против предполагаемого типа Data.bytestring.internal.byteString
UPD:
Спасибо за ответы, что * куски хороши выглядят как способ пойти, но я несколько шокировал результатом, моя оригинальная функция выглядела так:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
А теперь стал:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS t = decodeUtf8 $ intercalate "" $ toChunks t
и да, эта функция не работает, потому что ее неправильно, если мы поставляем текст
, то мы уверены, что этот текст правильно закодирован и готов к использованию и преобразованию Это глупо, но такое многословное преобразование все еще должно происходить где-то снаружи HTMLTOITEMS
.