2016-01-25 107 views
0
字符串转换

看到这个相关的SO问题:Automatic conversion between String and Data.Text in haskell最优雅的方式做在Haskell

鉴于Text类型的字符串,我想制作一个懒惰的字节串。

这工作,但我不知道它是否是最优的,鉴于这两个Text和懒惰的字节串有被“串像”财产,我还是用没有泛型unpack

import qualified Data.ByteString.Lazy (ByteString) 
import    Data.Text   (Text, unpack) 
import    Data.String   (fromString) 
import    Data.Text   (unpack) 

convert :: IsString str => Text -> str 
convert = fromString . unpack 

我发现,它提供了多态函数

convertString :: a -> b 

ConvertibleStrings类型类的部分包string-conversions

虽然它工作正常,但我很怀疑:为什么我需要额外的软件包?难道已经没有像IsString这样的类型类型,它提供了toString方法和组合的通用转换函数fromString . toString

回答

2

[好了,而我是编辑我的问题,一个可能的答案初现,给我]

在它说hackage-page of string-conversions

假设这两种类型的字节串的UTF-8编码。

因此,有些假设与转换一起进行,并且字符串类型的通用转换可能不合意。 性能可能还取决于输入和输出类型,通用转换会假装它们都是一样的。

所以我采取的最好的做法是现在这个,是明确的,而不是多态:

import   Data.ByteString.Lazy (ByteString) 
import qualified Data.ByteString.Lazy as ByteString 
import qualified Data.Text.Encoding as Text 

convert :: Text -> ByteString 
convert = ByteString.fromStrict . Text.encodeUtf8