range-0.3.2.2: Data/Range/Algebra/Predicate.hs
{-# LANGUAGE Safe #-}
module Data.Range.Algebra.Predicate where
import Control.Applicative
import Data.Range.Algebra.Internal
predicateAlgebra :: Algebra RangeExprF (a -> Bool)
predicateAlgebra (Invert f) = liftA not f
predicateAlgebra (Union f g) = liftA2 (||) f g
predicateAlgebra (Intersection f g) = liftA2 (&&) f g
predicateAlgebra (Difference f g) = liftA2 (&&~) f g
where (&&~) a b = a && not b