sized-types-0.2.7.20101112: qc/QC.hs
-- Copy this module if you need Quick Check.
module QC where
import qualified Test.QuickCheck as QC
import Data.Sized.Ix()
import Data.Sized.Matrix as M
import Data.Sized.Arith
instance Size n => QC.Arbitrary (X0_ n) where
arbitrary = QC.elements [minBound .. maxBound]
instance Size n => QC.Arbitrary (X1_ n) where
arbitrary = QC.elements [minBound .. maxBound]
instance (QC.Arbitrary ix, Size ix, QC.Arbitrary a) => QC.Arbitrary (Matrix ix a) where
arbitrary = f $ \ ixs -> do
elems <- sequence [ QC.arbitrary | _ <- ixs ]
return $ matrix elems
where f :: (Size ix) => ([ix] -> m (Matrix ix a)) -> m (Matrix ix a)
f fn = fn M.all