packages feed

genvalidity-aeson-0.3.0.0: src/Data/GenValidity/Aeson.hs

{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE CPP #-}

module Data.GenValidity.Aeson where
#if !MIN_VERSION_base(4,8,0)
import Data.Functor ((<$>))
#endif
import Data.Foldable (toList)
import Data.GenValidity
import Data.GenValidity.HashMap ()
import Data.GenValidity.Scientific ()
import Data.GenValidity.Text ()
import Data.GenValidity.Vector ()
import Data.Validity.Aeson ()

import Data.Aeson

import Test.QuickCheck

instance GenValid Value where
    genValid =
        oneof
            [ Object <$> genValid
            , Array <$> genValid
            , String <$> genValid
            , Number <$> genValid
            , Bool <$> genValid
            , pure Null
            ]
    shrinkValid (Object hm) =
        (Object <$> shrinkValid hm) ++
        toList hm ++ concatMap shrinkValid (toList hm)
    shrinkValid (Array a) =
        (Array <$> shrinkValid a) ++
        toList a ++ concatMap shrinkValid (toList a)
    shrinkValid (String s) = String <$> shrinkValid s
    shrinkValid (Number s) = Number <$> shrinkValid s
    shrinkValid (Bool s) = Bool <$> shrinkValid s
    shrinkValid Null = []