import Test.Extrapolate
main :: IO ()
main = do
putStrLn "Properties that should be OK:"
check $ \x y -> x + y == y + (x :: Int)
check $ \x y -> x * y == y * (x :: Int)
check $ \x y z -> x + (y + z) == (x + y) + (z :: Int)
check $ \x y z -> x * (y * z) == (x * y) * (z :: Int)
putStrLn ""
putStrLn "Properties that should fail:"
check $ \x -> x + 1 == (x :: Int)
check $ \x -> x /= (x :: Int)
check $ \x y -> x /= (y :: Int)
check $ \x y z -> x /= y && y /= (z :: Int)
check $ \(x,y) -> x /= (y :: Int)
check $ \(x,y,z) -> x /= y && y /= (z :: Int)