on master help sign in
Monoid instances.
f38accaBryan O'Sullivan
Data/Aeson/Types.hs+31−6
@@ -28,23 +28,24 @@ module Data.Aeson.Types
28 , object
28 , object
29 ) where
29 ) where
30
30
31−import Control.Monad (MonadPlus(..), ap, liftM)
32import Control.Arrow ((***))
31import Control.Arrow ((***))
33import Control.DeepSeq (NFData(..))
32import Control.DeepSeq (NFData(..))
33+import Control.Monad (MonadPlus(..), ap, liftM)
34+import Data.Data (Data)
34import Data.Map (Map)
35import Data.Map (Map)
35−import qualified Data.ByteString as B
36+import Data.Monoid (Dual(..), First(..), Last(..))
36−import qualified Data.ByteString.Lazy as LB
37−import Data.Text.Encoding (decodeUtf8, encodeUtf8)
38import Data.Text (Text, pack, unpack)
37import Data.Text (Text, pack, unpack)
39−import qualified Data.Text.Lazy as LT
38+import Data.Text.Encoding (decodeUtf8, encodeUtf8)
40import Data.Time.Clock (UTCTime)
39import Data.Time.Clock (UTCTime)
41import Data.Time.Format (formatTime, parseTime)
40import Data.Time.Format (formatTime, parseTime)
42import Data.Typeable (Typeable)
41import Data.Typeable (Typeable)
43−import Data.Data (Data)
44import Data.Vector (Vector)
42import Data.Vector (Vector)
45import System.Locale (defaultTimeLocale)
43import System.Locale (defaultTimeLocale)
44+import qualified Data.ByteString as B
45+import qualified Data.ByteString.Lazy as LB
46import qualified Data.Map as M
46import qualified Data.Map as M
47import qualified Data.Set as Set
47import qualified Data.Set as Set
48+import qualified Data.Text.Lazy as LT
48import qualified Data.Vector as V
49import qualified Data.Vector as V
49
50
50-- | A JSON \"object\" (key\/value map).
51-- | A JSON \"object\" (key\/value map).
@@ -330,6 +331,30 @@ instance (FromJSON a, FromJSON b) => FromJSON (a,b) where
330 fromJSON _ = empty
331 fromJSON _ = empty
331 {-# INLINE fromJSON #-}
332 {-# INLINE fromJSON #-}
332
333
334+instance ToJSON a => ToJSON (Dual a) where
335+ toJSON = toJSON . getDual
336+ {-# INLINE toJSON #-}
337+
338+instance FromJSON a => FromJSON (Dual a) where
339+ fromJSON = liftM Dual . fromJSON
340+ {-# INLINE fromJSON #-}
341+
342+instance ToJSON a => ToJSON (First a) where
343+ toJSON = toJSON . getFirst
344+ {-# INLINE toJSON #-}
345+
346+instance FromJSON a => FromJSON (First a) where
347+ fromJSON = liftM First . fromJSON
348+ {-# INLINE fromJSON #-}
349+
350+instance ToJSON a => ToJSON (Last a) where
351+ toJSON = toJSON . getLast
352+ {-# INLINE toJSON #-}
353+
354+instance FromJSON a => FromJSON (Last a) where
355+ fromJSON = liftM Last . fromJSON
356+ {-# INLINE fromJSON #-}
357+
333-- | Transform one map into another. The ordering of keys must be
358-- | Transform one map into another. The ordering of keys must be
334-- preserved.
359-- preserved.
335transformMap :: (Ord k1, Ord k2) => (k1 -> k2) -> (v1 -> v2)
360transformMap :: (Ord k1, Ord k2) => (k1 -> k2) -> (v1 -> v2)