module Data.MonoidMap.QuickCheck.Instances.Arbitrary ()
where
import Data.Functor
( (<$>)
)
import Data.Monoid.Null
( MonoidNull
)
import Data.MonoidMap
( MonoidMap
)
import Data.Ord
( Ord
)
import Test.QuickCheck
( Arbitrary (arbitrary, shrink)
, shrinkMap
)
import qualified Data.MonoidMap as MonoidMap
instance
( Arbitrary k
, Arbitrary v
, Ord k
, MonoidNull v
)
=> (Arbitrary (MonoidMap k v))
where
arbitrary :: Gen (MonoidMap k v)
arbitrary = Map k v -> MonoidMap k v
forall v k. MonoidNull v => Map k v -> MonoidMap k v
MonoidMap.fromMap (Map k v -> MonoidMap k v) -> Gen (Map k v) -> Gen (MonoidMap k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen (Map k v)
forall a. Arbitrary a => Gen a
arbitrary
shrink :: MonoidMap k v -> [MonoidMap k v]
shrink = (Map k v -> MonoidMap k v)
-> (MonoidMap k v -> Map k v) -> MonoidMap k v -> [MonoidMap k v]
forall a b. Arbitrary a => (a -> b) -> (b -> a) -> b -> [b]
shrinkMap Map k v -> MonoidMap k v
forall v k. MonoidNull v => Map k v -> MonoidMap k v
MonoidMap.fromMap MonoidMap k v -> Map k v
forall k v. MonoidMap k v -> Map k v
MonoidMap.toMap