smallcheck-laws-0.2: 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)

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)

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