Safe Haskell | None |
---|---|
Language | Haskell2010 |
NumHask.Range
Description
representation of a continuous range of a type
- newtype Range a = Range' (a, a)
- pattern Range :: forall a. a -> a -> Range a
- gridSensible :: (Fractional a, Ord a, FromInteger a, QuotientField a, ExpField a) => Pos -> Range a -> Int -> [a]
Documentation
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>>>
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
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 a
s pleasing to human sense and sensibility
the a
s may well lie outside the original range as a result