字节串和字符串

ByteStrings and Strings

如何解决以下问题:

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)

注意我需要让它们具有我已经设置的类型。

编译错误:

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)’

我该如何解决这个错误?

我无法在 Hackage 中找到适合您使用的 urlDecode,所以我不能确定。但它可能需要严格的 ByteString 而不是懒惰的,在这种情况下,以下应该有效。

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)