2016-05-09 9 views
-2

Wie folgende Problem zu lösen:ByteStrings und Streicher

import Data.ByteString.Lazy as BS (readFile, ByteString, unpack, fromStrict) 
import Data.ByteString.Char8 as C8 (pack) 
import Data.ByteString.UTF8  (toString) 
import Data.Char     (chr) 

stringToBS :: String -> BS.ByteString 
stringToBS str = BS.fromStrict $ C8.pack str 

recode :: String -> String 
recode str = toString $ urlDecode True (stringToBS str) 

HINWEIS Ich brauche sie die Typen habe ich bereits festgelegt.

Fehler bei Compilierung:

Couldn't match expected type ‘Data.ByteString.Internal.ByteString’ 
      with actual type ‘ByteString’ 
NB: ‘Data.ByteString.Internal.ByteString’ 
     is defined in ‘Data.ByteString.Internal’ 
    ‘ByteString’ is defined in ‘Data.ByteString.Lazy.Internal’ 
In the second argument of ‘urlDecode’, namely ‘(stringToBS str)’ 
In the second argument of ‘($)’, namely 
    ‘urlDecode True (stringToBS str)’ 

Wie kann ich diesen Fehler beheben?

+0

Verwenden Sie nicht die faule Variante von 'ByteString' für' urlDecode'. – MicroVirus

+1

Was ist 'urlDecode' (Typ!)? – leftaroundabout

+0

Woher bekommen Sie 'urlDecode'? – Kwarrtz

Antwort

2

Ich konnte kein urlDecode in Hackage finden, das zu Ihrer Verwendung passt, also kann ich nicht sicher sein., Aber es erwartet wahrscheinlich eine strenge ByteString eher als eine faule, in welchem ​​Fall sollte das folgende funktionieren.

import Data.ByteString as BS (readFile, ByteString, unpack) 
import Data.ByteString.Char8 as C8 (pack) 
import Data.ByteString.UTF8  (toString) 
import Data.Char     (chr) 

recode :: String -> String 
recode str = toString $ urlDecode True (C8.pack str)