Final version of JSON to sum type
- Magnus Therning
After some feedback on my previous post I ended up with the following implementation.
instance FromJSON V.VersionRange where
= withObject "VersionRange" go
parseJSON where
=
go o <$> o .: "ThisVersion" <|>
V.thisVersion <$> o .: "LaterVersion" <|>
V.laterVersion <$> o .: "EarlierVersion" <|>
V.earlierVersion V.WildcardVersion <$> o .: "WildcardVersion" <|>
<$> o .: "AnyVersion" <|>
nullaryOp V.anyVersion <$> o .: "UnionVersionRanges" <|>
binaryOp V.unionVersionRanges <$> o .: "IntersectVersionRanges" <|>
binaryOp V.intersectVersionRanges V.VersionRangeParens <$> o .: "VersionRangeParens"
nullaryOp :: a -> Value -> a
= const
nullaryOp
= f a b binaryOp f [a, b]
Thanks David for your suggestions.