runAll :: forall e . forall s . (Show e, Show s, Eq e, SetOf e s) => Gen e -> Gen s -> IO ()
runAll ge gs =
  mapM_ quickCheck [allE (\x -> elements ((singleton x) :: s) == [x]),
                    allS prop_univIsIntersectionIdentity,
                    allS prop_emptyIsIntersectionZero,
                    allS prop_emptyIsUnionIdentity,
                    allS prop_univIsUnionZero,
                    allS prop_intersectionWithSelfIsSelf,
                    allS prop_unionWithSelfIsSelf,
                    allS2 prop_intersectionCommutative,
                    allS3 prop_intersectionAssociative,
                    allS2 prop_unionCommutative,
                    allS3 prop_unionAssociative,
                    allS3 prop_distributivity,
                    allS prop_sameAsReflexive,
                    allS2 prop_sameAsSymmetric,
                    allS3 prop_sameAsTransitive,
                    allS prop_univIsBiggest,
                    allS prop_emptyHasSizeZero,
                    allS2 prop_intersectionNoLarger,
                    allS prop_elementCount]
    where allE = forAll ge
          allS = forAll gs
          allS2 = forAll gs2 . uncurry
          allS3 = forAll (gPair gs2 gs) . uncurry . uncurry
          gs2 = gPair gs gs
          gPair = liftM2 (,)
runAll :: forall e . forall s . (Show e, Show s, Eq e, SetOf e s) => Gen e -> Gen s -> IO ()
runAll ge gs =
  mapM_ quickCheck [allE (\x -> elements ((singleton x) :: s) == [x]),
                    allS prop_univIsIntersectionIdentity,
                    allS prop_emptyIsIntersectionZero,
                    allS prop_emptyIsUnionIdentity,
                    allS prop_univIsUnionZero,
                    allS prop_intersectionWithSelfIsSelf,
                    allS prop_unionWithSelfIsSelf,
                    allS2 prop_intersectionCommutative,
                    allS3 prop_intersectionAssociative,
                    allS2 prop_unionCommutative,
                    allS3 prop_unionAssociative,
                    allS3 prop_distributivity,
                    allS prop_sameAsReflexive,
                    allS2 prop_sameAsSymmetric,
                    allS3 prop_sameAsTransitive,
                    allS prop_univIsBiggest,
                    allS prop_emptyHasSizeZero,
                    allS2 prop_intersectionNoLarger,
                    allS prop_elementCount]
    where allE = forAll ge
          allS = forAll gs
          allS2 = forAll gs2 . uncurry
          allS3 = forAll (gPair gs2 gs) . uncurry . uncurry
          gs2 = gPair gs gs
          gPair = liftM2 (,)
runAll ge gs =
  mapM_ quickCheck [allE (\x -> elements ((singleton x) :: s) == [x]),
                    allS prop_univIsIntersectionIdentity,
                    allS prop_emptyIsIntersectionZero,
                    allS prop_emptyIsUnionIdentity,
                    allS prop_univIsUnionZero,
                    allS prop_intersectionWithSelfIsSelf,
                    allS prop_unionWithSelfIsSelf,
                    allS2 prop_intersectionCommutative,
                    allS3 prop_intersectionAssociative,
                    allS2 prop_unionCommutative,
                    allS3 prop_unionAssociative,
                    allS3 prop_distributivity,
                    allS prop_sameAsReflexive,
                    allS2 prop_sameAsSymmetric,
                    allS3 prop_sameAsTransitive,
                    allS prop_univIsBiggest,
                    allS prop_emptyHasSizeZero,
                    allS2 prop_intersectionNoLarger,
                    allS prop_elementCount]
    where allE = forAll ge
          allS = forAll gs
          allS2 = forAll gs2 . uncurry
          allS3 = forAll (gPair gs2 gs) . uncurry . uncurry
          gs2 = gPair gs gs
          gPair = liftM2 (,)