+all_equal [] = True -- Vacuously
+all_equal (x:xs) = all (== x) xs
+
+
+
+-- | Returns 'True' if the vectors xs and ys are disjoint, 'False'
+-- otherwise.
+--
+-- Examples:
+--
+-- >>> let xs = Data.Vector.fromList [1,2,3]
+-- >>> let ys = Data.Vector.fromList [4,5,6]
+-- >>> disjoint xs ys
+-- True
+--
+-- >>> let ys = Data.Vector.fromList [3,4,5]
+-- >>> disjoint xs ys
+-- False
+--
+-- Only used in tests.
+--
+disjoint :: (Eq a) => V.Vector a -> V.Vector a -> Bool
+disjoint xs ys =
+ intersect xs ys == V.empty
+ where
+ intersect :: (Eq a) => V.Vector a -> V.Vector a -> V.Vector a
+ intersect ws zs =
+ V.filter (`V.elem` zs) ws
+
+prop_factorial_greater :: Int -> Property
+prop_factorial_greater n =
+ n <= 20 ==> factorial n >= n
+
+
+test_flatten1 :: Assertion
+test_flatten1 =
+ assertEqual "flatten actually works" expected_list actual_list