numhask-range-0.2.3.1: Numbers that are range representations

Safe HaskellNone
LanguageHaskell2010

NumHask.Rect

Description

a two-dimensional plane, implemented as a composite of a Pair of Ranges.

Synopsis

Documentation

newtype Rect a #

a Pair of Ranges that form a rectangle in what is often thought of as the XY plane.

>>> let a = Rect (-1) 1 (-2) 4
>>> a
Rect -1 1 -2 4
>>> let (Ranges x y) = a
>>> x
Range -1 1
>>> y
Range -2 4
>>> fmap (+1) (Rect 1 2 3 4)
Rect 2 3 4 5
>>> one :: Rect Double
Rect -0.5 0.5 -0.5 0.5
>>> zero :: Rect Double
Rect Infinity -Infinity Infinity -Infinity

as a Field instance

>>> Rect 0 1 2 3 + zero
Rect 0.0 1.0 2.0 3.0
>>> Rect 0 1 (-2) (-1) + Rect 2 3 (-5) 3
Rect 0.0 3.0 -5.0 3.0
>>> Rect 1 1 1 1 - one
Rect 0.5 1.0 0.5 1.0
>>> Rect 0 1 0 1 * one
Rect 0.0 1.0 0.0 1.0
>>> Rect 0 1 0 1 / one
Rect 0.0 1.0 0.0 1.0
>>> singleton (Pair 1.0 2.0) :: Rect Double
Rect 1.0 1.0 2.0 2.0
>>> abs (Rect 1 0 1 0)
Rect 0.0 1.0 0.0 1.0
>>> sign (Rect 1 0 1 0) == negate one
True

as a Space instance

>>> project (Rect 0 1 (-1) 0) (Rect 1 4 10 0) (Pair 0.5 1)
Pair 2.5 -10.0
>>> gridSpace (Rect 0 10 0 1) (Pair 2 2)
[Rect 0.0 5.0 0.0 0.5,Rect 0.0 5.0 0.5 1.0,Rect 5.0 10.0 0.0 0.5,Rect 5.0 10.0 0.5 1.0]
>>> grid MidPos (Rect 0 10 0 1) (Pair 2 2)
[Pair 2.5 0.25,Pair 2.5 0.75,Pair 7.5 0.25,Pair 7.5 0.75]

Constructors

Rect' (Compose Pair Range a) 
Instances
Functor Rect # 
Instance details

Defined in NumHask.Rect

Methods

fmap :: (a -> b) -> Rect a -> Rect b #

(<$) :: a -> Rect b -> Rect a #

Applicative Rect # 
Instance details

Defined in NumHask.Rect

Methods

pure :: a -> Rect a #

(<*>) :: Rect (a -> b) -> Rect a -> Rect b #

liftA2 :: (a -> b -> c) -> Rect a -> Rect b -> Rect c #

(*>) :: Rect a -> Rect b -> Rect b #

(<*) :: Rect a -> Rect b -> Rect a #

Foldable Rect # 
Instance details

Defined in NumHask.Rect

Methods

fold :: Monoid m => Rect m -> m #

foldMap :: Monoid m => (a -> m) -> Rect a -> m #

foldr :: (a -> b -> b) -> b -> Rect a -> b #

foldr' :: (a -> b -> b) -> b -> Rect a -> b #

foldl :: (b -> a -> b) -> b -> Rect a -> b #

foldl' :: (b -> a -> b) -> b -> Rect a -> b #

foldr1 :: (a -> a -> a) -> Rect a -> a #

foldl1 :: (a -> a -> a) -> Rect a -> a #

toList :: Rect a -> [a] #

null :: Rect a -> Bool #

length :: Rect a -> Int #

elem :: Eq a => a -> Rect a -> Bool #

maximum :: Ord a => Rect a -> a #

minimum :: Ord a => Rect a -> a #

sum :: Num a => Rect a -> a #

product :: Num a => Rect a -> a #

Traversable Rect # 
Instance details

Defined in NumHask.Rect

Methods

traverse :: Applicative f => (a -> f b) -> Rect a -> f (Rect b) #

sequenceA :: Applicative f => Rect (f a) -> f (Rect a) #

mapM :: Monad m => (a -> m b) -> Rect a -> m (Rect b) #

sequence :: Monad m => Rect (m a) -> m (Rect a) #

Distributive Rect # 
Instance details

Defined in NumHask.Rect

Methods

distribute :: Functor f => f (Rect a) -> Rect (f a) #

collect :: Functor f => (a -> Rect b) -> f a -> Rect (f b) #

distributeM :: Monad m => m (Rect a) -> Rect (m a) #

collectM :: Monad m => (a -> Rect b) -> m a -> Rect (m b) #

Representable Rect # 
Instance details

Defined in NumHask.Rect

Associated Types

type Rep Rect :: * #

Methods

tabulate :: (Rep Rect -> a) -> Rect a #

index :: Rect a -> Rep Rect -> a #

Singleton Rect #

fixme: this is a deeply flawed hack

Instance details

Defined in NumHask.Rect

Methods

singleton :: a -> Rect a #

Traversable1 Rect # 
Instance details

Defined in NumHask.Rect

Methods

traverse1 :: Apply f => (a -> f b) -> Rect a -> f (Rect b) #

sequence1 :: Apply f => Rect (f b) -> f (Rect b) #

Foldable1 Rect # 
Instance details

Defined in NumHask.Rect

Methods

fold1 :: Semigroup m => Rect m -> m #

foldMap1 :: Semigroup m => (a -> m) -> Rect a -> m #

toNonEmpty :: Rect a -> NonEmpty a #

Apply Rect # 
Instance details

Defined in NumHask.Rect

Methods

(<.>) :: Rect (a -> b) -> Rect a -> Rect b #

(.>) :: Rect a -> Rect b -> Rect b #

(<.) :: Rect a -> Rect b -> Rect a #

liftF2 :: (a -> b -> c) -> Rect a -> Rect b -> Rect c #

Additive a => AdditiveModule Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(.+) :: Rect a -> a -> Rect a #

(+.) :: a -> Rect a -> Rect a #

AdditiveGroup a => AdditiveGroupModule Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(.-) :: Rect a -> a -> Rect a #

(-.) :: a -> Rect a -> Rect a #

Multiplicative a => MultiplicativeModule Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(.*) :: Rect a -> a -> Rect a #

(*.) :: a -> Rect a -> Rect a #

MultiplicativeGroup a => MultiplicativeGroupModule Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(./) :: Rect a -> a -> Rect a #

(/.) :: a -> Rect a -> Rect a #

Additive a => AdditiveBasis Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(.+.) :: Rect a -> Rect a -> Rect a #

AdditiveGroup a => AdditiveGroupBasis Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(.-.) :: Rect a -> Rect a -> Rect a #

Multiplicative a => MultiplicativeBasis Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(.*.) :: Rect a -> Rect a -> Rect a #

MultiplicativeGroup a => MultiplicativeGroupBasis Rect a # 
Instance details

Defined in NumHask.Rect

Methods

(./.) :: Rect a -> Rect a -> Rect a #

Eq a => Eq (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

(==) :: Rect a -> Rect a -> Bool #

(/=) :: Rect a -> Rect a -> Bool #

Show a => Show (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

showsPrec :: Int -> Rect a -> ShowS #

show :: Rect a -> String #

showList :: [Rect a] -> ShowS #

Generic (Rect a) # 
Instance details

Defined in NumHask.Rect

Associated Types

type Rep (Rect a) :: * -> * #

Methods

from :: Rect a -> Rep (Rect a) x #

to :: Rep (Rect a) x -> Rect a #

(FromInteger a, Signed a, Ord a, BoundedField a) => Semigroup (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

(<>) :: Rect a -> Rect a -> Rect a #

sconcat :: NonEmpty (Rect a) -> Rect a #

stimes :: Integral b => b -> Rect a -> Rect a #

(FromInteger a, Signed a, Ord a, BoundedField a) => Monoid (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

mempty :: Rect a #

mappend :: Rect a -> Rect a -> Rect a #

mconcat :: [Rect a] -> Rect a #

Arbitrary a => Arbitrary (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

arbitrary :: Gen (Rect a) #

shrink :: Rect a -> [Rect a] #

NFData a => NFData (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

rnf :: Rect a -> () #

(FromInteger a, AdditiveInvertible a, BoundedField a, Ord a) => Signed (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

sign :: Rect a -> Rect a #

abs :: Rect a -> Rect a #

(BoundedField a, Ord a, Epsilon a) => Epsilon (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

nearZero :: Rect a -> Bool #

aboutEqual :: Rect a -> Rect a -> Bool #

positive :: Rect a -> Bool #

veryPositive :: Rect a -> Bool #

veryNegative :: Rect a -> Bool #

(FromInteger a, Ord a, BoundedField a) => MultiplicativeMagma (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

times :: Rect a -> Rect a -> Rect a #

(FromInteger a, Ord a, BoundedField a) => MultiplicativeUnital (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

one :: Rect a #

(FromInteger a, Ord a, BoundedField a) => MultiplicativeAssociative (Rect a) # 
Instance details

Defined in NumHask.Rect

(FromInteger a, Ord a, BoundedField a) => MultiplicativeCommutative (Rect a) # 
Instance details

Defined in NumHask.Rect

(FromInteger a, Ord a, BoundedField a) => MultiplicativeInvertible (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

recip :: Rect a -> Rect a #

(FromInteger a, Ord a, BoundedField a) => Multiplicative (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

(*) :: Rect a -> Rect a -> Rect a #

(FromInteger a, Ord a, BoundedField a) => MultiplicativeGroup (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

(/) :: Rect a -> Rect a -> Rect a #

Ord a => AdditiveMagma (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

plus :: Rect a -> Rect a -> Rect a #

(Ord a, BoundedField a) => AdditiveUnital (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

zero :: Rect a #

Ord a => AdditiveAssociative (Rect a) # 
Instance details

Defined in NumHask.Rect

Ord a => AdditiveCommutative (Rect a) # 
Instance details

Defined in NumHask.Rect

Ord a => AdditiveInvertible (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

negate :: Rect a -> Rect a #

Ord a => AdditiveIdempotent (Rect a) # 
Instance details

Defined in NumHask.Rect

(Ord a, BoundedField a) => Additive (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

(+) :: Rect a -> Rect a -> Rect a #

(Ord a, BoundedField a) => AdditiveGroup (Rect a) # 
Instance details

Defined in NumHask.Rect

Methods

(-) :: Rect a -> Rect a -> Rect a #

(FromInteger a, Signed a, Ord a, BoundedField a) => Space (Rect a) # 
Instance details

Defined in NumHask.Rect

Associated Types

type Element (Rect a) :: * #

type Grid (Rect a) :: * #

Methods

lower :: Rect a -> Element (Rect a) #

upper :: Rect a -> Element (Rect a) #

mid :: Rect a -> Element (Rect a) #

width :: Rect a -> Element (Rect a) #

singleton :: Element (Rect a) -> Rect a #

singular :: Rect a -> Bool #

element :: Element (Rect a) -> Rect a -> Bool #

contains :: Rect a -> Rect a -> Bool #

disjoint :: Rect a -> Rect a -> Bool #

intersects :: Rect a -> Rect a -> Bool #

union :: Rect a -> Rect a -> Rect a #

nul :: Rect a #

space :: Foldable f => f (Element (Rect a)) -> Rect a #

project :: Rect a -> Rect a -> Element (Rect a) -> Element (Rect a) #

grid :: Pos -> Rect a -> Grid (Rect a) -> [Element (Rect a)] #

gridSpace :: Rect a -> Grid (Rect a) -> [Rect a] #

AdditiveGroup a => Normed (Rect a) (Pair a) # 
Instance details

Defined in NumHask.Rect

Methods

normL1 :: Rect a -> Pair a #

normL2 :: Rect a -> Pair a #

normLp :: Pair a -> Rect a -> Pair a #

type Rep Rect # 
Instance details

Defined in NumHask.Rect

type Rep Rect = (Bool, Bool)
type Rep (Rect a) # 
Instance details

Defined in NumHask.Rect

type Rep (Rect a) = D1 (MetaData "Rect" "NumHask.Rect" "numhask-range-0.2.3.1-J89sQYUYBLeKCiE9B8m0BR" True) (C1 (MetaCons "Rect'" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (Compose Pair Range a))))
type Element (Rect a) # 
Instance details

Defined in NumHask.Rect

type Element (Rect a) = Pair a
type Grid (Rect a) # 
Instance details

Defined in NumHask.Rect

type Grid (Rect a) = Pair Int

pattern Rect :: a -> a -> a -> a -> Rect a #

pattern of Rect lowerx upperx lowery uppery

pattern Ranges :: Range a -> Range a -> Rect a #

pattern of Ranges xrange yrange

corners :: (FromInteger a, Signed a, BoundedField a, Ord a) => Rect a -> [Pair a] #

create a list of pairs representing the lower left and upper right cormners of a rectangle.

projectRect :: (FromInteger a, Signed a, Ord a, BoundedField a) => Rect a -> Rect a -> Rect a -> Rect a #

project a Rect from an old range to a new one