numhask-range-0.1.2: Numbers that are range representations

Safe HaskellNone
LanguageHaskell2010

NumHask.Range

Description

representation of a continuous range of a type

Synopsis

Documentation

newtype Range a Source #

A continuous range over type a

>>> let a = Range (-1) 1
>>> a
Range -1 1
>>> fmap (+1) (Range 1 2)
Range 2 3
>>> one :: Range Double
Range -0.5 0.5
>>> zero :: Range Double
Range Infinity -Infinity

as a Field instance

>>> Range 0 1 + zero
Range 0.0 1.0
>>> Range 0 1 + Range 2 3
Range 0.0 3.0
>>> Range 1 1 - one
Range 0.5 1.0
>>> Range 0 1 * one
Range 0.0 1.0
>>> Range 0 1 / one
Range 0.0 1.0
>>> P.singleton 2.3 :: Range Double
Range 2.3 2.3
>>> abs (Range 1 0)
Range 0.0 1.0
>>> sign (Range 1 0) == negate one
True

Idempotent

>>> Range 0 2 + Range 0 2
Range 0.0 2.0

as a space instance

>>> project (Range 0 1) (Range 1 4) 0.5
2.5
>>> grid OuterPos (Range 0 10) 5
[0.0,2.0,4.0,6.0,8.0,10.0]
>>> gridSpace (Range 0 1) 4
[Range 0.0 0.25,Range 0.25 0.5,Range 0.5 0.75,Range 0.75 1.0]
>>> gridSensible OuterPos (Range (-12) 23) 6
[-10.0,-5.0,0.0,5.0,10.0,15.0,20.0]

Constructors

Range' (a, a) 

Instances

Monad Range Source # 

Methods

(>>=) :: Range a -> (a -> Range b) -> Range b #

(>>) :: Range a -> Range b -> Range b #

return :: a -> Range a #

fail :: String -> Range a #

Functor Range Source # 

Methods

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

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

Applicative Range Source # 

Methods

pure :: a -> Range a #

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

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

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

Foldable Range Source # 

Methods

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

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

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

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

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

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

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

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

toList :: Range a -> [a] #

null :: Range a -> Bool #

length :: Range a -> Int #

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

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

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

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

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

Traversable Range Source # 

Methods

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

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

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

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

Distributive Range Source # 

Methods

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

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

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

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

Representable Range Source # 

Associated Types

type Rep (Range :: * -> *) :: * #

Methods

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

index :: Range a -> Rep Range -> a #

Eq1 Range Source # 

Methods

liftEq :: (a -> b -> Bool) -> Range a -> Range b -> Bool #

Show1 Range Source # 

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Range a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Range a] -> ShowS #

Singleton Range Source # 

Methods

singleton :: a -> Range a #

Traversable1 Range Source # 

Methods

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

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

Apply Range Source # 

Methods

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

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

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

Foldable1 Range Source # 

Methods

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

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

toNonEmpty :: Range a -> NonEmpty a #

Additive a => AdditiveModule Range a Source # 

Methods

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

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

AdditiveGroup a => AdditiveGroupModule Range a Source # 

Methods

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

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

Multiplicative a => MultiplicativeModule Range a Source # 

Methods

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

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

MultiplicativeGroup a => MultiplicativeGroupModule Range a Source # 

Methods

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

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

Additive a => AdditiveBasis Range a Source # 

Methods

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

AdditiveGroup a => AdditiveGroupBasis Range a Source # 

Methods

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

Multiplicative a => MultiplicativeBasis Range a Source # 

Methods

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

MultiplicativeGroup a => MultiplicativeGroupBasis Range a Source # 

Methods

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

Eq a => Eq (Range a) Source # 

Methods

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

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

Show a => Show (Range a) Source # 

Methods

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

show :: Range a -> String #

showList :: [Range a] -> ShowS #

Generic (Range a) Source # 

Associated Types

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

Methods

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

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

(Ord a, BoundedField a, FromInteger a) => Monoid (Range a) Source # 

Methods

mempty :: Range a #

mappend :: Range a -> Range a -> Range a #

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

Arbitrary a => Arbitrary (Range a) Source # 

Methods

arbitrary :: Gen (Range a) #

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

NFData a => NFData (Range a) Source # 

Methods

rnf :: Range a -> () #

(FromInteger a, AdditiveInvertible a, BoundedField a, Ord a) => Signed (Range a) Source # 

Methods

sign :: Range a -> Range a #

abs :: Range a -> Range a #

(BoundedField a, Ord a, FromInteger a, Epsilon a) => Epsilon (Range a) Source # 
(FromInteger a, Ord a, BoundedField a) => MultiplicativeMagma (Range a) Source #

times may well be some sort of affine projection lurking under the hood

Methods

times :: Range a -> Range a -> Range a #

(FromInteger a, Ord a, BoundedField a) => MultiplicativeUnital (Range a) Source #

The unital object (Range -0.5 0.5) satisfies:

width one = one
mid zero = zero

Methods

one :: Range a #

(FromInteger a, Ord a, BoundedField a) => MultiplicativeAssociative (Range a) Source # 
(FromInteger a, Ord a, BoundedField a) => MultiplicativeCommutative (Range a) Source # 
(FromInteger a, Ord a, BoundedField a) => MultiplicativeInvertible (Range a) Source # 

Methods

recip :: Range a -> Range a #

(FromInteger a, Ord a, BoundedField a) => Multiplicative (Range a) Source # 

Methods

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

(FromInteger a, Ord a, BoundedField a) => MultiplicativeGroup (Range a) Source # 

Methods

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

(FromInteger a, Ord a, BoundedField a) => AdditiveMagma (Range a) Source #

convex hull union

Methods

plus :: Range a -> Range a -> Range a #

(FromInteger a, Ord a, BoundedField a) => AdditiveUnital (Range a) Source # 

Methods

zero :: Range a #

(FromInteger a, Ord a, BoundedField a) => AdditiveAssociative (Range a) Source # 
(FromInteger a, Ord a, BoundedField a) => AdditiveCommutative (Range a) Source # 
(FromInteger a, Ord a, BoundedField a) => AdditiveInvertible (Range a) Source # 

Methods

negate :: Range a -> Range a #

(FromInteger a, Ord a, BoundedField a) => Additive (Range a) Source # 

Methods

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

(FromInteger a, Ord a, BoundedField a) => AdditiveGroup (Range a) Source # 

Methods

(-) :: Range a -> Range a -> Range a #

(FromInteger a, Ord a, BoundedField a) => Space (Range a) Source # 

Associated Types

type Element (Range a) :: * Source #

type Grid (Range a) :: * Source #

AdditiveGroup a => Normed (Range a) a Source # 

Methods

size :: Range a -> a #

(Ord a, AdditiveGroup a) => Metric (Range a) a Source # 

Methods

distance :: Range a -> Range a -> a #

type Rep Range Source # 
type Rep Range = Bool
type Rep (Range a) Source # 
type Rep (Range a) = D1 (MetaData "Range" "NumHask.Range" "numhask-range-0.1.2-CmZ4cDyHeT11iNey4zKK81" True) (C1 (MetaCons "Range'" PrefixI False) (S1 (MetaSel (Nothing Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (a, a))))
type Element (Range a) Source # 
type Element (Range a) = a
type Grid (Range a) Source # 
type Grid (Range a) = Int

pattern Range :: forall a. a -> a -> Range a Source #

A tuple is the preferred concrete implementation of a Range, due to many libraries having substantial optimizations for tuples already (eg Vector). 'Pattern Synonyms' allow us to recover a constructor without the need for tuple syntax.

gridSensible :: (Fractional a, Ord a, FromInteger a, QuotientField a, ExpField a) => Pos -> Range a -> Int -> [a] Source #

turn a range into n as pleasing to human sense and sensibility the as may well lie outside the original range as a result