A verdict is a Boolean pass or fail 'verdict' on a test result; an instance of the Verdict class evaluates to such a result, but may also contain additional information about the test. A collection of verdicts is also a verdict: if all of the results are ``pass'', the verdict for the collection is pass. Specifically, the collective verdict is the Boolean conjunction of the individual verdicts. Therefore any foldable container of verdicts is also a verdict. \begin{code}
{-# LANGUAGE FlexibleInstances #-}
module Test.GenCheck.Base.Verdict ( Verdict(..), SummaryVerdict(..) ) where

import Data.Foldable(Foldable())

class Verdict s where
  verdict :: s -> Bool

instance Verdict Bool where
  verdict = id
\end{code} Structures can be evaluated to a boolean if they are foldable and their elements are generic booleans. \begin{code}
class Foldable s => SummaryVerdict s where
  summaryverdict :: Verdict v => s v -> Bool