-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Simple boolean tests to see if a value abides by certain properties -- -- Please see the README on GitHub at -- https://github.com/athanclark/abides#readme @package abides @version 0.0.0 module Test.Abides module Test.Abides.Control.Alternative -- | (f | g) * x == (f * x) | (g | x) distributive :: Alternative f => Applicative f => Eq (f b) => f (a -> b) -> f (a -> b) -> f a -> Bool -- | empty * x == empty annihilation :: Alternative f => Applicative f => Eq (f b) => f (a -> b) -> Bool module Test.Abides.Control.Applicative identity :: Applicative f => Eq (f a) => f a -> Bool composition :: Applicative f => Eq (f c) => f (b -> c) -> f (a -> b) -> f a -> Bool module Test.Abides.Control.Category identity :: Category c => Eq (c a b) => c a b -> Bool associative :: Category q => Eq (q a d) => q c d -> q b c -> q a b -> Bool module Test.Abides.Control.Comonad leftIdentity :: Comonad w => Eq (w a) => w a -> Bool rightIdentity :: Comonad w => Eq a => (w a -> a) -> w a -> Bool associative :: Comonad w => Eq (w c) => (w b -> c) -> (w a -> b) -> w a -> Bool module Test.Abides.Control.Monad leftIdentity :: Monad m => Eq (m b) => (a -> m b) -> a -> Bool rightIdentity :: Monad m => Eq (m a) => m a -> Bool associative :: Monad m => Eq (m c) => (a -> m b) -> (b -> m c) -> m a -> Bool annihilation :: MonadPlus m => Eq (m b) => (a -> m b) -> Bool distributive :: MonadPlus m => Eq (m b) => (a -> m b) -> m a -> m a -> Bool module Test.Abides.Data.Bounded -- | minBound <= x <= maxBound? bounded :: Bounded a => Ord a => a -> Bool module Test.Abides.Data.Enum -- | compare x y == compare (fromEnum x) (fromEnum y) compareHom :: Enum a => Ord a => a -> a -> Bool -- | pred (succ x) == x predsucc :: Enum a => Eq a => a -> Bool -- | succ (pred x) == x succpred :: Enum a => Eq a => a -> Bool module Test.Abides.Data.Foldable -- | fold (map f x) == foldMap f x foldMap' :: Foldable f => Functor f => Monoid b => Eq b => (a -> b) -> f a -> Bool module Test.Abides.Data.Functor -- | fmap id x == x? identity :: Functor f => Eq (f a) => f a -> Bool -- | fmap (f . g) x == fmap f (fmap g x)? composition :: Functor f => Eq (f a) => (a -> a) -> (a -> a) -> f a -> Bool module Test.Abides.Data.Ord -- | x <= x? reflexive :: Ord a => a -> Bool -- | x y && y <= x = x == y antisymmetry :: Ord a => a -> a -> Bool -- | x y && y <= z = x <= z transitive :: Ord a => a -> a -> a -> Bool module Test.Abides.Properties -- | x == x? reflexive :: Eq a => a -> Bool -- | f x y == f y x? commutative :: Eq b => (a -> a -> b) -> a -> a -> Bool -- | f (f x y) z == f x (f y z)? associative :: Eq a => (a -> a -> a) -> a -> a -> a -> Bool -- | f (f x) == f x? idempotent :: Eq a => (a -> a) -> a -> Bool -- | f (g x y) == g (f x) (f y)? distributive :: Eq a => (a -> a) -> (a -> a -> a) -> a -> a -> Bool -- | f x y == x? Note: bottom ~ forall y. f bottom y == bottom, while unit -- ~ forall x. f x unit == x constL :: Eq a => (a -> a -> a) -> a -> a -> Bool -- | f x y == y? constR :: Eq a => (a -> a -> a) -> a -> a -> Bool module Test.Abides.Data.Semigroup associative :: Semigroup a => Eq a => a -> a -> a -> Bool module Test.Abides.Data.Monoid leftIdentity :: Monoid a => Eq a => a -> Bool rightIdentity :: Monoid a => Eq a => a -> Bool module Test.Abides.Data.Eq -- | x == x? reflexive :: Eq a => a -> Bool -- | x == y => y == x? symmetry :: Eq a => a -> a -> Bool -- | x == y && y == z => x == z transitive :: Eq a => a -> a -> a -> Bool -- | x /= y => not (x == y) negation :: Eq a => a -> a -> Bool