smallcheck-laws-0.3: SmallCheck properties for common laws

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`.