Schönen Tag.
Das einzige, was ich jetzt an Haskell hasse, ist die Menge an Paketen für die Arbeit mit Strings.
Zuerst habe ich native Haskell- [Char]
Strings verwendet, aber als ich versuchte, Hackage-Bibliotheken zu verwenden , ging ich in endlosen Konvertierungen völlig verloren. Jedes Paket scheint eine andere Zeichenfolgenimplementierung zu verwenden, einige übernehmen ihre eigene handgemachte Sache.
Als nächstes habe ich meinen Code mit Data.Text
Zeichenfolgen und OverloadedStrings
Erweiterungen umgeschrieben. Ich habe mich dafür entschieden, Text
weil er einen größeren Funktionsumfang hat, aber es scheint, dass viele Projekte dies bevorzugen ByteString
.
Jemand könnte kurz überlegen, warum man das eine oder andere benutzt?
PS: Übrigens, wie konvertiert man von Text
nach ByteString
?
Konnte nicht erwartet Typ entsprechen Data.ByteString.Lazy.Internal.ByteString gegen gefolgert Typ Text IO Data.ByteString.Lazy.Internal.ByteString Inferred Typ: IO Text Erwartete Typ
Ich habe versucht , encodeUtf8
aus Data.Text.Encoding
, aber kein Glück:
Der erwartete Typ Data.ByteString.Lazy.Internal.ByteString konnte nicht mit dem abgeleiteten Typ Data.ByteString.Internal.ByteString verglichen werden
UPD:
Vielen Dank für die Antworten, dass * Chunks Güte wie ein langer Weg aussieht, aber ich war etwas schockiert über das Ergebnis, meine ursprüngliche Funktion sah folgendermaßen aus:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . convertFuzzy Discard "CP1251" "UTF8"
Und jetzt wurde:
htmlToItems :: Text -> [Item]
htmlToItems =
getItems . parseTags . fromLazyBS . convertFuzzy Discard "CP1251" "UTF8" . toLazyBS
where
toLazyBS t = fromChunks [encodeUtf8 t]
fromLazyBS t = decodeUtf8 $ intercalate "" $ toChunks t
Und ja, diese Funktion funktioniert nicht, weil sie falsch ist. Wenn wir sie bereitstellen Text
, sind wir zuversichtlich, dass dieser Text ordnungsgemäß codiert und einsatzbereit ist. Die Konvertierung ist dumm, aber eine solch ausführliche Konvertierung muss noch durchgeführt werden irgendwo draußen platzieren htmltoItems
.