Here is my implementation for those who are still interested:
-- | ACID
$(deriveSafeCopy 0 'base ''JSONStateStore)
$(deriveSafeCopy 0 'base ''JSONState)
$(deriveSafeCopy 0 'base ''Value)
$(deriveSafeCopy 0 'base ''Number)
-- | An instance of SafeCopy for the Array Value.
instance SafeCopy a => SafeCopy (V.Vector a) where
getCopy = contain $ fmap V.fromList safeGet
putCopy = putCopy . V.toList
-- | An instance of SafeCopy for the Object Value.
instance (SafeCopy a, Eq a, Hashable a, SafeCopy b) => SafeCopy (H.HashMap a b) where
getCopy = contain $ fmap H.fromList safeGet
putCopy = contain . safePut . H.toList