-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Handle Boolean values generatically.
--
-- This package provides various functions and classes for dealing with
-- things which are like Boolean values. It also defines a few useful
-- instances. The main benefit is the ability to use the usual
-- &&, etc. operators without having to invent new
-- operator names for every kind of Bool-like thing.
--
-- Changes:
--
--
-- - Increase efficiency of Boolean instance for
-- Bool.
-- - Shorten source code.
-- - Remove function instance. (Control.Monad.Instances
-- provides an equivilent Monad instance.)
--
@package AC-Boolean
@version 1.1.0
-- | Type classes (and instances) for things that are like Booleans.
--
-- The names of methods in Boolean clash with the standard
-- Prelude, so you probably want to inport the Prelude hiding these three
-- names (since the class methods do the same thing, but with more
-- general type signatures).
--
-- Please note the following points:
--
--
-- - This module imports Control.Monad.Instances, which brings
-- several new Monad instances into scope.
-- - Among other things, a monad instance for functions is brought into
-- scope. This, combined with the Boolean instance for monads,
-- causes any function that returns a Boolean to become a
-- Boolean itself. This allows you to write constructions such as
-- (> 5) && (< 9), which has the obvious
-- meaning.
-- - Another interesting consequence of the Boolean instance for
-- monads is that Maybe Bool is a Boolean. You can
-- use this to implement 3-value logic ("true", "false" and "other"),
-- with Nothing implementing "other". Any logical operations yield
-- Nothing unless all arguments are Just something. (This
-- is usually the behaviour you want.)
--
module Data.Boolean
-- | Typeclass for things that have true and false values.
--
-- Instances:
--
--
class BoolValue b
true :: BoolValue b => b
false :: BoolValue b => b
-- | Convert a Bool value to the appropriate BoolValue.
lift_bool :: BoolValue b => Bool -> b
-- | Typeclass for things that support Boolean operators.
--
-- Instances:
--
--
-- - Normal Bool values (obviously).
-- - Any function that returns a Boolean. This instance arrises
-- due to the monad instance for functions.
-- - Any monadic action that returns a Boolean. The left action
-- is performed before the right action (which may be significant,
-- depending on the monad).
--
class Boolean b
(&&) :: Boolean b => b -> b -> b
(||) :: Boolean b => b -> b -> b
not :: Boolean b => b -> b
xor :: Boolean b => b -> b -> b
instance (Monad m, Boolean b) => Boolean (m b)
instance Boolean Bool
instance (Monad m, BoolValue b) => BoolValue (m b)
instance BoolValue Bool