Ich teste einige HTTP-Anforderungen in Haskell und habe die folgenden Methoden:I/O Monad und ByteString zu Char Konvertierung?
import qualified Data.ByteString.Lazy as LAZ
import Language.Haskell.TH.Ppr
import System.IO
import Data.Word (Word8)
request :: IO LAZ.ByteString
request = do
response <- simpleHttp "https://www.url.com"
return (response)
exampleFunctionOne:: IO LAZ.ByteString -> IO LAZ.ByteString
exampleFunctionOne bytes = do
html <- bytes
let bytesToChars = bytesToString $ LAZ.unpack html
let x = exampleFunctionTwo bytesToChars
bytes
exampleFunctionTwo :: [Char] -> [Char]
exampleFunctionTwo chars = --Do stuff...
main = do
exampleFunctionOe $ request
Meine Fragen sind:
Gibt es einen straight forward Weg, um das ByteString auf [Char] zu konvertieren ? Derzeit muss ich konvertieren (ByteString -> Word8) und dann (Word8 -> Char)
Bin ich richtig sagen, die 'return()' Anweisung in meiner Anfrage-Funktion ist einfach die erneute Anwendung Monade-Kontext (in diesem Fall IO) auf den Wert, den ich extrahiert habe (Antwort < - simpleHttp)? Oder hat es einen zusätzlichen Zweck?
Seien Sie vorsichtig hier. Eine Byte-Zeichenfolge ist NICHT tatsächlich in eine Liste von Zeichen umwandelbar, es sei denn, wir kennen ihre Codierung. 'Char8' nimmt latin-1 an, was beliebig ist. AFAICS, der allgemeine Trend verwendet utf8 für den größten Teil des Textes im Netz. In html zum Beispiel wird die Codierung manchmal innerhalb des HTML selbst erklärt, was alles etwas komplexer macht. Ich hoffe, es gibt eine Bibliothek, die das halbtransparent irgendwo behandelt. – chi