{-# 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