这是我能想到的,但我认为它不是非常有效或安全:
import qualified Data.ByteString.Char8 as B8
convert2Int = read . B8.unpack
有更好的方法吗?我发现库中的函数用于Int
类型,但不适用于Int32
,Int64
,Word64
等其他类型的函数。
答案 0 :(得分:3)
最简单的方法可能是来自Data.Binary
的{{3}}:
import qualified Data.ByteString.Lazy as BL
import Data.Binary (decode)
convertToIntegral :: (Binary a, Integral a) => BL.ByteString -> a
convertToIntegral = decode
还有decodeOrFail
,如果解码失败,会产生Either
值。
P.S。:我如何知道decode
适用于您想要的类型?阅读decode
。
答案 1 :(得分:0)
我找到的另一种方法是使用Attoparsec module:
import Data.Attoparsec.ByteString.Char8
import qualified Data.ByteString as B
convertToIntegral :: (Integral a) => B.ByteString -> Either String a
convertToIntegral = parseOnly decimal
当然,这仅适用于没有标志的字符串(不像" -3"和" + 5")。人们可以使用"签名"而不是"十进制"在这些情况下。