Boolean-0.2.4: Generalized booleans and numbers

Copyright(c) Conal Elliott 2009-2012
LicenseBSD3
Maintainerconal@conal.net
Stabilityexperimental
Safe HaskellSafe
LanguageHaskell98

Data.Boolean

Description

Some classes for generalized boolean operations.

In this design, for if-then-else, equality and inequality tests, the boolean type depends on the value type.

I also tried using a unary type constructor class. The class doesn't work for regular booleans, so generality is lost. Also, we'd probably have to wire class constraints in like: (==*) :: Eq a => f Bool -> f a -> f a -> f a, which disallows situations needing additional constraints, e.g., Show.

Starting with 0.1.0, this package uses type families. Up to version 0.0.2, it used MPTCs with functional dependencies. My thanks to Andy Gill for suggesting & helping with the change.

Synopsis

Documentation

class Boolean b where #

Generalized boolean class

Methods

true :: b #

false :: b #

notB :: b -> b #

(&&*) :: b -> b -> b infixr 3 #

(||*) :: b -> b -> b infixr 2 #

Instances
Boolean Bool # 
Instance details

Defined in Data.Boolean

Methods

true :: Bool #

false :: Bool #

notB :: Bool -> Bool #

(&&*) :: Bool -> Bool -> Bool #

(||*) :: Bool -> Bool -> Bool #

Boolean bool => Boolean (z -> bool) # 
Instance details

Defined in Data.Boolean

Methods

true :: z -> bool #

false :: z -> bool #

notB :: (z -> bool) -> z -> bool #

(&&*) :: (z -> bool) -> (z -> bool) -> z -> bool #

(||*) :: (z -> bool) -> (z -> bool) -> z -> bool #

type family BooleanOf a #

BooleanOf computed the boolean analog of a specific type.

Instances
type BooleanOf Bool # 
Instance details

Defined in Data.Boolean

type BooleanOf Char # 
Instance details

Defined in Data.Boolean

type BooleanOf Double # 
Instance details

Defined in Data.Boolean

type BooleanOf Float # 
Instance details

Defined in Data.Boolean

type BooleanOf Int # 
Instance details

Defined in Data.Boolean

type BooleanOf Integer # 
Instance details

Defined in Data.Boolean

type BooleanOf [a] # 
Instance details

Defined in Data.Boolean

type BooleanOf [a] = BooleanOf a
type BooleanOf (z -> a) # 
Instance details

Defined in Data.Boolean

type BooleanOf (z -> a) = z -> BooleanOf a
type BooleanOf (a, b) # 
Instance details

Defined in Data.Boolean

type BooleanOf (a, b) = BooleanOf a
type BooleanOf (a, b, c) # 
Instance details

Defined in Data.Boolean

type BooleanOf (a, b, c) = BooleanOf a
type BooleanOf (a, b, c, d) # 
Instance details

Defined in Data.Boolean

type BooleanOf (a, b, c, d) = BooleanOf a

class Boolean (BooleanOf a) => IfB a where #

Types with conditionals

Methods

ifB :: bool ~ BooleanOf a => bool -> a -> a -> a #

Instances
IfB Bool # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf Bool => bool -> Bool -> Bool -> Bool #

IfB Char # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf Char => bool -> Char -> Char -> Char #

IfB Double # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf Double => bool -> Double -> Double -> Double #

IfB Float # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf Float => bool -> Float -> Float -> Float #

IfB Int # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf Int => bool -> Int -> Int -> Int #

IfB Integer # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf Integer => bool -> Integer -> Integer -> Integer #

(Boolean (BooleanOf a), BooleanOf a ~ Bool) => IfB [a] # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf [a] => bool -> [a] -> [a] -> [a] #

IfB a => IfB (z -> a) # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf (z -> a) => bool -> (z -> a) -> (z -> a) -> z -> a #

(bool ~ BooleanOf p, bool ~ BooleanOf q, IfB p, IfB q) => IfB (p, q) # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf (p, q) => bool -> (p, q) -> (p, q) -> (p, q) #

(bool ~ BooleanOf p, bool ~ BooleanOf q, bool ~ BooleanOf r, IfB p, IfB q, IfB r) => IfB (p, q, r) # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf (p, q, r) => bool -> (p, q, r) -> (p, q, r) -> (p, q, r) #

(bool ~ BooleanOf p, bool ~ BooleanOf q, bool ~ BooleanOf r, bool ~ BooleanOf s, IfB p, IfB q, IfB r, IfB s) => IfB (p, q, r, s) # 
Instance details

Defined in Data.Boolean

Methods

ifB :: bool ~ BooleanOf (p, q, r, s) => bool -> (p, q, r, s) -> (p, q, r, s) -> (p, q, r, s) #

boolean :: (IfB a, bool ~ BooleanOf a) => a -> a -> bool -> a #

Expression-lifted conditional with condition last

cond :: (Applicative f, IfB a, bool ~ BooleanOf a) => f bool -> f a -> f a -> f a #

Point-wise conditional

crop :: (Applicative f, Monoid (f a), IfB a, bool ~ BooleanOf a) => f bool -> f a -> f a #

Generalized cropping, filling in mempty where the test yields false.

class Boolean (BooleanOf a) => EqB a where #

Types with equality. Minimum definition: '(==*)'.

Minimal complete definition

(==*)

Methods

(==*) :: bool ~ BooleanOf a => a -> a -> bool infix 4 #

(/=*) :: bool ~ BooleanOf a => a -> a -> bool infix 4 #

Instances
EqB Bool # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf Bool => Bool -> Bool -> bool #

(/=*) :: bool ~ BooleanOf Bool => Bool -> Bool -> bool #

EqB Char # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf Char => Char -> Char -> bool #

(/=*) :: bool ~ BooleanOf Char => Char -> Char -> bool #

EqB Double # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf Double => Double -> Double -> bool #

(/=*) :: bool ~ BooleanOf Double => Double -> Double -> bool #

EqB Float # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf Float => Float -> Float -> bool #

(/=*) :: bool ~ BooleanOf Float => Float -> Float -> bool #

EqB Int # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf Int => Int -> Int -> bool #

(/=*) :: bool ~ BooleanOf Int => Int -> Int -> bool #

EqB Integer # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf Integer => Integer -> Integer -> bool #

(/=*) :: bool ~ BooleanOf Integer => Integer -> Integer -> bool #

EqB a => EqB (z -> a) # 
Instance details

Defined in Data.Boolean

Methods

(==*) :: bool ~ BooleanOf (z -> a) => (z -> a) -> (z -> a) -> bool #

(/=*) :: bool ~ BooleanOf (z -> a) => (z -> a) -> (z -> a) -> bool #

class Boolean (BooleanOf a) => OrdB a where #

Types with inequality. Minimum definition: '(<*)'.

Minimal complete definition

(<*)

Methods

(<*) :: bool ~ BooleanOf a => a -> a -> bool infix 4 #

(<=*) :: bool ~ BooleanOf a => a -> a -> bool infix 4 #

(>*) :: bool ~ BooleanOf a => a -> a -> bool infix 4 #

(>=*) :: bool ~ BooleanOf a => a -> a -> bool infix 4 #

Instances
OrdB Bool # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf Bool => Bool -> Bool -> bool #

(<=*) :: bool ~ BooleanOf Bool => Bool -> Bool -> bool #

(>*) :: bool ~ BooleanOf Bool => Bool -> Bool -> bool #

(>=*) :: bool ~ BooleanOf Bool => Bool -> Bool -> bool #

OrdB Char # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf Char => Char -> Char -> bool #

(<=*) :: bool ~ BooleanOf Char => Char -> Char -> bool #

(>*) :: bool ~ BooleanOf Char => Char -> Char -> bool #

(>=*) :: bool ~ BooleanOf Char => Char -> Char -> bool #

OrdB Double # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf Double => Double -> Double -> bool #

(<=*) :: bool ~ BooleanOf Double => Double -> Double -> bool #

(>*) :: bool ~ BooleanOf Double => Double -> Double -> bool #

(>=*) :: bool ~ BooleanOf Double => Double -> Double -> bool #

OrdB Float # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf Float => Float -> Float -> bool #

(<=*) :: bool ~ BooleanOf Float => Float -> Float -> bool #

(>*) :: bool ~ BooleanOf Float => Float -> Float -> bool #

(>=*) :: bool ~ BooleanOf Float => Float -> Float -> bool #

OrdB Int # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf Int => Int -> Int -> bool #

(<=*) :: bool ~ BooleanOf Int => Int -> Int -> bool #

(>*) :: bool ~ BooleanOf Int => Int -> Int -> bool #

(>=*) :: bool ~ BooleanOf Int => Int -> Int -> bool #

OrdB Integer # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf Integer => Integer -> Integer -> bool #

(<=*) :: bool ~ BooleanOf Integer => Integer -> Integer -> bool #

(>*) :: bool ~ BooleanOf Integer => Integer -> Integer -> bool #

(>=*) :: bool ~ BooleanOf Integer => Integer -> Integer -> bool #

OrdB a => OrdB (z -> a) # 
Instance details

Defined in Data.Boolean

Methods

(<*) :: bool ~ BooleanOf (z -> a) => (z -> a) -> (z -> a) -> bool #

(<=*) :: bool ~ BooleanOf (z -> a) => (z -> a) -> (z -> a) -> bool #

(>*) :: bool ~ BooleanOf (z -> a) => (z -> a) -> (z -> a) -> bool #

(>=*) :: bool ~ BooleanOf (z -> a) => (z -> a) -> (z -> a) -> bool #

minB :: (IfB a, OrdB a) => a -> a -> a #

Variant of min using ifB and '(<=*)'

maxB :: (IfB a, OrdB a) => a -> a -> a #

Variant of max using ifB and '(>=*)'

sort2B :: (IfB a, OrdB a) => (a, a) -> (a, a) #

Variant of min and max using ifB and '(<=*)'

guardedB :: (IfB b, bool ~ BooleanOf b) => bool -> [(bool, b)] -> b -> b #

A generalized replacement for guards and chained ifs.

caseB :: (IfB b, bool ~ BooleanOf b) => a -> [(a -> bool, b)] -> b -> b #

A generalized version of a case like control structure.