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

module Data.GenValidity.HashSet where

import Data.GenValidity
import Data.HashSet (HashSet)
import qualified Data.HashSet as HS
import Data.Hashable (Hashable)
import Data.Validity.HashSet ()

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