smallcheck-laws-0.3: SmallCheck properties for common laws

Safe HaskellSafe-Inferred
LanguageHaskell2010

Test.SmallCheck.Laws.Applicative

Contents

Synopsis

Applicative laws

identity :: (Eq (f a), Monad m, Show (f a), Applicative f) => Series m (f a) -> Property m Source

Check the identity law hold for the given Applicative Series:

pure id <*> v ≡ v

composition :: (Eq (f b), Monad m, Show (f c), Show (f (a -> b)), Show (f (c -> a)), Applicative f) => Series m (f (c -> a)) -> Series m (f c) -> Series m (f (a -> b)) -> Property m Source

Check the composition law hold for the given Applicative Series:

'(.)' <$> u <*> v <*> w ≡  u <*> (v <*> w)

Exhaustive generation for the Series of v, u and w. Be aware of combinatorial explosion.

compositionSum :: (Eq (f b), Monad m, Show (f c), Show (f (a -> b)), Show (f (c -> a)), Applicative f) => Series m (f (c -> a)) -> Series m (f c) -> Series m (f (a -> b)) -> Property m Source

Check the composition law hold for the given Applicative Series:

'(.)' <$> u <*> v <*> w ≡  u <*> (v <*> w)

This uses zipLogic3 for the generation Series of v, u and w.

homomorphism :: forall m f a b. (Monad m, Applicative f, Eq b, Eq (f b), Show a, Show b, Serial Identity a, Serial Identity b) => Proxy f -> Series m a -> Series m (a -> b) -> Property m Source

Check the homomorphism law hold for the given Applicative Series:

pure f <*> pure x ≡ pure (f x)

Exhaustive generation for the Series of x and f. Be aware of combinatorial explosion.

homomorphismSum :: forall m f a b. (Monad m, Applicative f, Eq b, Eq (f b), Show a, Show b, Serial Identity a, Serial Identity b) => Proxy f -> Series m a -> Series m (a -> b) -> Property m Source

Check the homomorphism law hold for the given Applicative Series:

pure f <*> pure x ≡ pure (f x)

This uses zipLogic for the generation Series of x and f.

interchange :: (Eq (f b), Monad m, Show a, Show (f (a -> b)), Applicative f) => Series m a -> Series m (f (a -> b)) -> Property m Source

Check the interchange law hold for the given Applicative Series:

u <*> pure y ≡ pure ($ y) <*> u

Exhaustive generation for the Series of y and u. Be aware of combinatorial explosion.

interchangeSum :: (Eq (f b), Monad m, Show a, Show (f (a -> b)), Applicative f) => Series m a -> Series m (f (a -> b)) -> Property m Source

Check the interchange law hold for the given Applicative Series:

u <*> pure y ≡ pure ($ y) <*> u

This uses zipLogic for the generation Series of y and u.