In meinem Haskell Programm muss ich mit Streichern und ByteStrings arbeiten:String -> ByteString und Reverse
import Data.ByteString.Lazy as BS (ByteString)
import Data.ByteString.Char8 as C8 (pack)
import Data.Char (chr)
stringToBS :: String -> ByteString
stringToBS str = C8.pack str
bsToString :: BS.ByteString -> String
bsToString bs = map (chr . fromEnum) . BS.unpack $ bs
bsToString
funktioniert gut, aber stringToBS
Ergebnisse mit folgenden Fehler bei der Zusammenstellung:
Couldn't match expected type ‘ByteString’
with actual type ‘Data.ByteString.Internal.ByteString’
NB: ‘ByteString’ is defined in ‘Data.ByteString.Lazy.Internal’
‘Data.ByteString.Internal.ByteString’
is defined in ‘Data.ByteString.Internal’
In the expression: pack str
In an equation for ‘stringToBS’: stringToBS str = pack str
Aber Ich muss es ByteString
von Data.ByteString.Lazy as BS (ByteString)
für weitere Arbeitsfunktionen in meinem Code sein lassen.
Irgendeine Idee, wie man mein Problem löst?
BTW, ich hoffe, Sie wissen, was Sie tun. Ein 'ByteString' ist eine Folge von Bytes und kein String: Die Konvertierung zwischen ihnen hängt im Wesentlichen von einer gegebenen Kodierung ab. Insbesondere geht 'Char8' davon aus, dass alles mit latin-1 codiert ist, und kürzt alles stillschweigend ab. – chi
Gibt es einen besonderen Grund, warum Sie 'String' und nicht' Text' verwenden, ist die Konvertierung mit der Kodierung/Dekodierung etwas einfacher. – epsilonhalbe
Da meine anderen Funktionen erfordert String –