在Aeson避免字符串往返

时间:2015-03-30 12:03:59

标签: haskell aeson

我有以下代码(它应该解析一个非常简单的{ "url": "http://some.url.here/" }哈希):

import           Control.Applicative
import qualified Data.ByteString       as B
import           Data.ByteString.Char8 (pack)


import           Data.Aeson            ()
import           Data.Aeson.Types



newtype SetNextUrl = SetNextUrl B.ByteString

instance FromJSON SetNextUrl where 
    parseJSON (Object v) = SetNextUrl <$>
        (pack <$> v .: "url" )

现在请注意,我暗示了这个&#34; url&#34;使用pack是String类型...这当然会导致一些转换开销:从输入ByteString到[Char]并返回....

问题:我怎样才能让Aeson解释&#34; url&#34; field as a ByteString?

1 个答案:

答案 0 :(得分:4)

aeson在内部使用Text作为字符串值,因此如果您使用Data.Text.Encoding.encodeUtf8,您将无法进行Text -> String -> ByteString转化,那么它就会去直接来自Text -> ByteString(iirc相当便宜)