{-# LANGUAGE MultiParamTypeClasses #-} {-# OPTIONS_GHC -fno-warn-orphans #-} module Scavenge.Results where import Test.QuickCheck import GHC.Generics import QuickSpec import Data.Map.Monoidal (MonoidalMap, toList, fromList) import Generic.Data import Scavenge.ClueState data Results k r = Results { rewards :: r , clues :: MonoidalMap [k] ClueState } deriving stock (Eq, Ord, Generic) deriving (Semigroup, Monoid) via Generically (Results k r) instance (Show k, Show r) => Show (Results k r) where show (Results r k) = mconcat [ "Results (" , show r , ") (fromList " , show $ toList k , ")" ] instance (Arbitrary k, Ord k, Arbitrary v) => Arbitrary (MonoidalMap k v) where arbitrary = fromList <$> arbitrary shrink = fmap fromList . genericShrink . toList instance (Ord k, Ord v) => Observe () (MonoidalMap k v) (MonoidalMap k v) instance (Ord k, Ord r) => Observe () (Results k r) (Results k r) where