我很惊讶地知道Aeson将()
编码为空数组。这种行为背后的原因是什么?我认为null
会更自然,我错了吗?
*Main> encode ()
"[]"
答案 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
返回Nothing
。encode Nothing
只是一个0元组,此实例与其他元组更加一致。)