module Test.Abides.Control.Alternative where import Control.Applicative (Alternative ((<|>)), empty) import qualified Test.Abides.Properties as P -- | (f <|> g) <*> x == (f <*> x) <|> (g <|> x) distributive :: Alternative f => Applicative f => Eq (f b) => f a -> f (a -> b) -> f (a -> b) -> Bool distributive x = P.distributive' (<*> x) (<|>) (<|>) -- | empty <*> x == empty annihilation :: Alternative f => Applicative f => Eq (f b) => f (a -> b) -> Bool annihilation f = (f <*> empty) == empty