Boolean-0.2.4: Generalized booleans and numbers
Copyright (c) Conal Elliott 2009-2012
License BSD3
Maintainer conal@conal.net
Stability experimental
Safe Haskell Safe-Inferred
Language Haskell98

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 Source #

Generalized boolean class

Methods

true :: b Source #

false :: b Source #

notB :: b -> b Source #

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

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

Instances

Instances details
Boolean Bool Source #
Instance details

Defined in Data.Boolean

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

Defined in Data.Boolean

Methods

true :: z -> bool Source #

false :: z -> bool Source #

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

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

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

type family BooleanOf a Source #

BooleanOf computed the boolean analog of a specific type.

Instances

Instances details
type BooleanOf Bool Source #
Instance details

Defined in Data.Boolean

type BooleanOf Char Source #
Instance details

Defined in Data.Boolean

type BooleanOf Double Source #
Instance details

Defined in Data.Boolean

type BooleanOf Float Source #
Instance details

Defined in Data.Boolean

type BooleanOf Int Source #
Instance details

Defined in Data.Boolean

type BooleanOf Integer Source #
Instance details

Defined in Data.Boolean

type BooleanOf [a] Source #
Instance details

Defined in Data.Boolean

type BooleanOf (z -> a) Source #
Instance details

Defined in Data.Boolean

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

Defined in Data.Boolean

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

Defined in Data.Boolean

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

Defined in Data.Boolean

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

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

Types with conditionals

Methods

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

Instances

Instances details
IfB Bool Source #
Instance details

Defined in Data.Boolean

IfB Char Source #
Instance details

Defined in Data.Boolean

IfB Double Source #
Instance details

Defined in Data.Boolean

IfB Float Source #
Instance details

Defined in Data.Boolean

IfB Int Source #
Instance details

Defined in Data.Boolean

IfB Integer Source #
Instance details

Defined in Data.Boolean

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

Defined in Data.Boolean

Methods

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

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

Defined in Data.Boolean

Methods

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

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

Defined in Data.Boolean

Methods

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

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

Defined in Data.Boolean

Methods

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

(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) Source #
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) Source #

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

Expression-lifted conditional with condition last

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

Point-wise conditional

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

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

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

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

Minimal complete definition

(==*)

Methods

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

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

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

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

Minimal complete definition

(<*)

Methods

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

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

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

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

Instances

Instances details
OrdB Bool Source #
Instance details

Defined in Data.Boolean

OrdB Char Source #
Instance details

Defined in Data.Boolean

OrdB Double Source #
Instance details

Defined in Data.Boolean

OrdB Float Source #
Instance details

Defined in Data.Boolean

OrdB Int Source #
Instance details

Defined in Data.Boolean

OrdB Integer Source #
Instance details

Defined in Data.Boolean

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

Defined in Data.Boolean

Methods

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

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

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

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

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

Variant of min using ifB and (<=*)

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

Variant of max using ifB and (>=*)

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

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

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

A generalized replacement for guards and chained ifs.

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

A generalized version of a case like control structure.