prop_allDifferent :: Eq a => [a] -> Bool
prop_allDifferent xs = do
  let referenceValue = (L.nub xs) == xs
  referenceValue == (allDifferent xs)
    && referenceValue == (allDifferent' xs)
    && referenceValue == (allDifferent'' xs)
    && referenceValue == (allDifferent''' xs)

-- run the tests using main
prop_allDifferent :: Eq a => [a] -> Bool
prop_allDifferent xs = do
  let referenceValue = (L.nub xs) == xs
  referenceValue == (allDifferent xs)
    && referenceValue == (allDifferent' xs)
    && referenceValue == (allDifferent'' xs)
    && referenceValue == (allDifferent''' xs)

-- run the tests using main
prop_allDifferent xs = do
  let referenceValue = (L.nub xs) == xs
  referenceValue == (allDifferent xs)
    && referenceValue == (allDifferent' xs)
    && referenceValue == (allDifferent'' xs)
    && referenceValue == (allDifferent''' xs)

-- run the tests using main