为什么Aeson将()编码为空数组?

时间:2013-10-20 13:35:17

标签: json haskell aeson

我很惊讶地知道Aeson将()编码为空数组。这种行为背后的原因是什么?我认为null会更自然,我错了吗?

*Main> encode ()
"[]"

1 个答案:

答案 0 :(得分:7)

ToJSON的{​​{1}}实例定义为:

()

因为通常,元组被编码为数组:

instance ToJSON () where
    toJSON _ = emptyArray
    {-# INLINE toJSON #-}

(我认为instance (ToJSON a, ToJSON b) => ToJSON (a,b) where toJSON (a,b) = Array $ V.create $ do mv <- VM.unsafeNew 2 VM.unsafeWrite mv 0 (toJSON a) VM.unsafeWrite mv 1 (toJSON b) return mv 没有多大意义;通常null表示可以为一个缺乏价值,所以在Haskell中你会使用{ {1}}。实际上,null返回Nothingencode Nothing只是一个0元组,此实例与其他元组更加一致。)