{-# LANGUAGE MultiParamTypeClasses #-}
module Scavenge.ClueState where
import Test.QuickCheck
import QuickSpec
import Data.Semigroup
data ClueState
= Seen | Failed | Completed
deriving stock (Eq, Ord, Show, Enum, Bounded)
deriving (Semigroup, Monoid) via Max ClueState
instance Observe () ClueState ClueState
instance Arbitrary ClueState where
arbitrary = elements $ enumFromTo minBound maxBound
seen :: ClueState
seen = Seen
completed :: ClueState
completed = Completed
failed :: ClueState
failed = Failed
sig_cluestate :: Sig
sig_cluestate = signature
[ con "seen" $ seen
, con "completed" $ completed
, con "failed" $ failed
, con "<>" $ (<>) @ClueState
, mono @ClueState
]