Data.Lub
 Stability experimental Maintainer conal@conal.net
 Contents Least upper bounds Some useful special applications of lub
Description
Compute least upper bound (lub) of two values, with respect to information content. I.e., merge the information available in each.
Synopsis
class HasLub a where
 lub :: a -> a -> a
flatLub :: a -> a -> a
parCommute :: HasLub a => (a -> a -> a) -> a -> a -> a
por :: Bool -> Bool -> Bool
pand :: Bool -> Bool -> Bool
ptimes :: (HasLub a, Num a) => a -> a -> a
Least upper bounds
 class HasLub a where Source
Types that support information merging (lub)
Methods
 lub :: a -> a -> a Source
Least upper information bound. Combines information available from each argument. The arguments must be consistent, i.e., must have a common upper bound.
Instances
 HasLub Bool HasLub Char HasLub Double HasLub Float HasLub Int HasLub Integer HasLub () HasLub a => HasLub ([] a) HasLub a => HasLub (Maybe a) HasLub b => HasLub (a -> b) (HasLub a, HasLub b) => HasLub (Either a b) (HasLub a, HasLub b) => HasLub ((,) a b)
 flatLub :: a -> a -> a Source

A lub for flat domains. Equivalent to unamb. Handy for defining HasLub instances, e.g.,

```   instance HasLub Integer where lub = flatLub
```
Some useful special applications of lub
 parCommute :: HasLub a => (a -> a -> a) -> a -> a -> a Source
Turn a binary commutative operation into that tries both orders in parallel, lub-merging the results. Useful when there are special cases that don't require evaluating both arguments.
 por :: Bool -> Bool -> Bool Source
Parallel or
 pand :: Bool -> Bool -> Bool Source
Parallel and
 ptimes :: (HasLub a, Num a) => a -> a -> a Source
Multiplication optimized for either argument being zero or one, where the other might be expensive/delayed.