module Test.Abides.Properties where
reflexive :: Eq a => a -> Bool
reflexive x = x == x
commutative :: Eq b => (a -> a -> b) -> a -> a -> Bool
commutative f x y = f x y == f y x
associative :: Eq a => (a -> a -> a) -> a -> a -> a -> Bool
associative f x y z = f (f x y) z == f x (f y z)
idempotent :: Eq a => (a -> a) -> a -> Bool
idempotent f x = f (f x) == f x
distributive :: Eq a => (a -> a) -> (a -> a -> a) -> a -> a -> Bool
distributive f g x y = f (g x y) == g (f x) (f y)
constL :: Eq a => (a -> a -> a) -> a -> a -> Bool
constL f x y = f x y == x
constR :: Eq a => (a -> a -> a) -> a -> a -> Bool
constR f x y = f x y == y