toysolver-0.0.4: src/Algebra/Lattice/Boolean.hs
{-# OPTIONS_GHC -Wall #-}
-----------------------------------------------------------------------------
-- |
-- Module : Algebra.Lattice.Boolean
-- Copyright : (c) Masahiro Sakai 2012-2013
-- License : BSD-style
--
-- Maintainer : masahiro.sakai@gmail.com
-- Stability : provisional
-- Portability : portable
--
-- Type classes for lattices and boolean algebras.
--
-----------------------------------------------------------------------------
module Algebra.Lattice.Boolean
(
-- * Boolean algebra
Complement (..)
, Boolean (..)
, true
, false
, (.&&.)
, (.||.)
, andB
, orB
) where
import Algebra.Lattice
infixr 3 .&&.
infixr 2 .||.
infix 1 .=>., .<=>.
-- | types that can be negated.
class Complement a where
notB :: a -> a
-- | types that can be combined with boolean operations.
class (BoundedLattice a, Complement a) => Boolean a where
(.=>.), (.<=>.) :: a -> a -> a
x .=>. y = notB x .||. y
x .<=>. y = (x .=>. y) .&&. (y .=>. x)
-- | alias of 'top'
true :: Boolean a => a
true = top
-- | alias of 'bottom'
false :: Boolean a => a
false = bottom
-- | alias of 'meet'
(.&&.) :: Boolean a => a -> a -> a
(.&&.) = meet
-- | alias of 'join'
(.||.) :: Boolean a => a -> a -> a
(.||.) = join
-- | alias of 'meets'
andB :: Boolean a => [a] -> a
andB = meets
-- | alias of 'joins'
orB :: Boolean a => [a] -> a
orB = joins