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

module Data.GenValidity.HashMap where

import Data.GenValidity
import Data.HashMap.Strict (HashMap)
import qualified Data.HashMap.Strict as HM
import Data.Hashable (Hashable)
import Data.Validity.HashMap ()

instance (Hashable k, Eq k, GenValid k, GenValid v) => GenValid (HashMap k v) where
  genValid :: Gen (HashMap k v)
genValid = [(k, v)] -> HashMap k v
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList ([(k, v)] -> HashMap k v) -> Gen [(k, v)] -> Gen (HashMap k v)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Gen [(k, v)]
forall a. GenValid a => Gen a
genValid
  shrinkValid :: HashMap k v -> [HashMap k v]
shrinkValid = ([(k, v)] -> HashMap k v) -> [[(k, v)]] -> [HashMap k v]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap [(k, v)] -> HashMap k v
forall k v. (Eq k, Hashable k) => [(k, v)] -> HashMap k v
HM.fromList ([[(k, v)]] -> [HashMap k v])
-> (HashMap k v -> [[(k, v)]]) -> HashMap k v -> [HashMap k v]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(k, v)] -> [[(k, v)]]
forall a. GenValid a => a -> [a]
shrinkValid ([(k, v)] -> [[(k, v)]])
-> (HashMap k v -> [(k, v)]) -> HashMap k v -> [[(k, v)]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. HashMap k v -> [(k, v)]
forall k v. HashMap k v -> [(k, v)]
HM.toList