Хороший день.
Єдине, що я зараз ненавиджу в Haskell - це кількість пакетів для роботи з рядком.
Спочатку я використовував власні [Char]
рядки Haskell , але коли я спробував почати використовувати бібліотеки хакерів, то повністю загубився в нескінченних перетвореннях. Здається, кожен пакет використовує різні рядки, деякі використовують власну річ.
Далі я переписав свій код із Data.Text
рядками та OverloadedStrings
розширенням, я вибрав, Text
оскільки він має ширший набір функцій, але, схоже, багато проектів віддають перевагу ByteString
.
Хтось міг дати короткі міркування, чому використовувати те чи інше?
PS: До речі, як конвертувати з 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
І так, ця функція не працює, оскільки вона неправильна, якщо ми Text
її подаємо, то ми впевнені, що цей текст правильно закодований і готовий до використання, і перетворити це дурне, але все-таки таке багатослівне перетворення все-таки має бути прийняте місце десь надворі htmltoItems
.