@@ -84,6 +84,7 @@ type T a = a -> Value
8484
8585toJSON :: (Data a) => a -> Value
8686toJSON = toJSON_generic
87+ `ext1Q` maybe
8788 `ext1Q` list
8889 `ext1Q` vector
8990 `ext1Q` set
@@ -119,6 +120,8 @@ toJSON = toJSON_generic
119120 `extQ` (T.toJSON :: T ())
120121 --`extQ` (T.toJSON :: T Ordering)
121122 where
123+ maybe (Just a) = toJSON a
124+ maybe Nothing = Null
122125 list xs = Array . V.fromList . map toJSON $ xs
123126 vector v = Array . V.map toJSON $ v
124127 set s = Array . V.fromList . map toJSON . Set.toList $ s
@@ -187,6 +190,7 @@ type F a = Parser a
187190
188191parseJSON :: (Data a) => Value -> Parser a
189192parseJSON j = parseJSON_generic j
193+ `ext1R` maybeP
190194 `ext1R` list
191195 `ext1R` vector
192196 `ext2R'` mapAny
@@ -222,6 +226,8 @@ parseJSON j = parseJSON_generic j
222226 where
223227 value :: (T.FromJSON a) => Parser a
224228 value = T.parseJSON j
229+ maybeP :: (Data a) => Parser (Maybe a)
230+ maybeP = if j == Null then return Nothing else Just <$> parseJSON j
225231 list :: (Data a) => Parser [a]
226232 list = V.toList <$> parseJSON j
227233 vector :: (Data a) => Parser (V.Vector a)