In aeson.Types.ToJSON
, there is already one call instances for ToJSON (Ratio Integer)
but it is show number like ("A" % "B") in JSON, I would like to make a custom version (sort of float-alike numbers) some where in my code:
instance ToJSON (Ratio Integer) where
toJSON r = String $ pack $ show $ (numerator r) / (denominator r)
Then the GHC tells me it's overlapping, is there any way I can override the one from Data.Aeson.Typtes.ToJSON
for Ratio Integer
?
Thank you
You don't, typically you introduce a "signal interface", like:
newtype MyRatio = MyRatio (Ratio Integer)
instance ToJSON MyRatio where
toJSON (MyRatio r) = String $ pack $ show $ (numerator r) / (denominator r)
and you thus wrap the values to serialize in the MyRatio
data constructor.