AC-Boolean-1.0.0: Handle Boolean values generatically.

Data.Boolean

Description

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

An 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.)

Synopsis

Documentation

class BoolValue b whereSource

Typeclass for things that have true and false values.

Instances:

  • Normal Bool values (obviously).
  • Any function that yields a BoolValue as its result. (For example, true is just a constant function that always returns a truth value, regardless of its input.)
  • Any monadic action that yields a BoolValue as its result. (This is just return applied to the appropriate BoolValue.)

Methods

true :: bSource

false :: bSource

Instances

BoolValue Bool 
(Monad m, BoolValue b) => BoolValue (m b) 
BoolValue b => BoolValue (x -> b) 

lift_bool :: BoolValue b => Bool -> bSource

Convert a Bool value to the appropriate BoolValue.

class Boolean b whereSource

Typeclass for things that support Boolean operators.

Instances:

  • Normal Bool values (obviously).
  • Any function that returns a Boolean. (The result is a new function that runs the old function(s) and applies the appropriate operator to the result(s).)
  • Any monadic action that returns a Boolean. (Again, the result is a new action that runs the existing action(s) and applies the appropriate operator to the result(s).)

Methods

(&&) :: b -> b -> bSource

Logical-AND of two values.

(||) :: b -> b -> bSource

Logical-OR of two values. (Inclusive-OR.)

not :: b -> bSource

Logical-NOT of two values. (Logical inverse.)

xor :: b -> b -> bSource

Exclusive-OR (XOR). There is a default implementation, but you can override it for efficiency if desired.

Instances

Boolean Bool 
(Monad m, Boolean b) => Boolean (m b) 
Boolean b => Boolean (x -> b)