numhask-range 0.1.3.0 → 0.2.0.0
raw patch · 9 files changed
+80/−67 lines, 9 filesdep +numhask-preludedep −numhaskdep ~base
Dependencies added: numhask-prelude
Dependencies removed: numhask
Dependency ranges changed: base
Files
- numhask-range.cabal +16/−10
- readme.md +3/−1
- src/NumHask/Pair.hs +5/−2
- src/NumHask/Range.hs +14/−11
- src/NumHask/RangeD.hs +4/−0
- src/NumHask/Rect.hs +26/−23
- src/NumHask/Space.hs +3/−0
- stack.yaml +4/−2
- test/test.hs +5/−18
numhask-range.cabal view
@@ -1,9 +1,11 @@--- This file has been generated from package.yaml by hpack version 0.18.1.+-- This file has been generated from package.yaml by hpack version 0.20.0. -- -- see: https://github.com/sol/hpack+--+-- hash: 18003f857cbb0ea73a97f0e023bddf802e171ba3f01574bd3d203588fe2449f9 name: numhask-range-version: 0.1.3.0+version: 0.2.0.0 synopsis: Numbers that are range representations description: Numbers that represent ranges of all sorts. category: project@@ -28,14 +30,15 @@ library hs-source-dirs: src- default-extensions: DeriveGeneric DeriveTraversable FlexibleContexts InstanceSigs MultiParamTypeClasses NegativeLiterals NoImplicitPrelude OverloadedStrings PatternSynonyms TypeFamilies UnicodeSyntax+ default-extensions: NegativeLiterals NoImplicitPrelude OverloadedStrings UnicodeSyntax+ ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints build-depends:- numhask >=0.1.3- , base >=4.7 && <4.11- , protolude- , QuickCheck+ QuickCheck , adjunctions+ , base >=4.7 && <4.12 , distributive+ , numhask-prelude >=0.0.1.0+ , protolude , semigroupoids exposed-modules: NumHask.Space@@ -52,11 +55,14 @@ main-is: test.hs hs-source-dirs: test- default-extensions: DeriveGeneric DeriveTraversable FlexibleContexts InstanceSigs MultiParamTypeClasses NegativeLiterals NoImplicitPrelude OverloadedStrings PatternSynonyms TypeFamilies UnicodeSyntax+ default-extensions: NegativeLiterals NoImplicitPrelude OverloadedStrings UnicodeSyntax+ ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints build-depends:- numhask >=0.1.3- , base >=4.7 && <5+ base >=4.7 && <5 , doctest+ , numhask-prelude >=0.0.1.0 , numhask-range , tasty+ other-modules:+ Paths_numhask_range default-language: Haskell2010
readme.md view
@@ -12,7 +12,9 @@ If you ask yourself what a chart is, sifting through the cruft of accumulated practice, nomenclature and usage, digging deep for charting's essence, and if you ask the question in haskell, here's the simplest object you find: -[](https://tonyday567.github.io/other/unitSquare.svg)+++[](other/src_Diagrams_TwoD_Shapes_unitSquareEx.svg) To a first approximation, charting is transforming and placing this unit on a physical XY plane, such as a screen, or on graph paper. A rectangle is a distended square; a line is a very thin rectangle; a histogram is a series of rectangles, and axes are nothing more than a collection of squares. The main thing on a chart that isn't a square is text, but even then we use square pixels to render.
src/NumHask/Pair.hs view
@@ -119,9 +119,12 @@ instance Traversable1 Pair where traverse1 f (Pair a b) = Pair <$> f a Data.Functor.Apply.<.> f b +instance (Semigroup a) => Semigroup (Pair a) where+ (Pair a0 b0) <> (Pair a1 b1) = Pair (a0 <> a1) (b0 <> b1)+ instance (Monoid a) => Monoid (Pair a) where mempty = Pair mempty mempty- (Pair a0 b0) `mappend` (Pair a1 b1) = Pair (a0 `mappend` a1) (b0 `mappend` b1)+ mappend = (<>) instance Distributive Pair where collect f x = Pair (getL . f <$> x) (getR . f <$> x)@@ -191,7 +194,7 @@ sign (Pair a b) = Pair (sign a) (sign b) abs (Pair a b) = Pair (abs a) (abs b) -instance (ExpField a, AdditiveGroup a, MultiplicativeUnital a) =>+instance (ExpField a, MultiplicativeUnital a) => Normed (Pair a) a where size (Pair a b) = sqrt (a ** (one + one) + b ** (one + one))
src/NumHask/Range.hs view
@@ -152,20 +152,20 @@ half = one / two -- | convex hull union-instance (FromInteger a, Ord a, BoundedField a) => AdditiveMagma (Range a) where+instance (Ord a) => AdditiveMagma (Range a) where plus (Range l0 u0) (Range l1 u1) = Range (min l0 l1) (max u0 u1) -instance (FromInteger a, Ord a, BoundedField a) => AdditiveUnital (Range a) where+instance (Ord a, BoundedField a) => AdditiveUnital (Range a) where zero = Range infinity neginfinity -instance (FromInteger a, Ord a, BoundedField a) => AdditiveAssociative (Range a)+instance (Ord a) => AdditiveAssociative (Range a) -instance (FromInteger a, Ord a, BoundedField a) => AdditiveInvertible (Range a) where+instance (Ord a) => AdditiveInvertible (Range a) where negate (Range l u) = Range u l -instance (FromInteger a, Ord a, BoundedField a) => AdditiveCommutative (Range a)-instance (FromInteger a, Ord a, BoundedField a) => Additive (Range a)-instance (FromInteger a, Ord a, BoundedField a) => AdditiveGroup (Range a)+instance (Ord a) => AdditiveCommutative (Range a)+instance (Ord a, BoundedField a) => Additive (Range a)+instance (Ord a, BoundedField a) => AdditiveGroup (Range a) -- | times may well be some sort of affine projection lurking under the hood instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeMagma (Range a) where@@ -208,7 +208,7 @@ | u' < l = l - u' | otherwise = zero -instance (BoundedField a, Ord a, FromInteger a, Epsilon a) => Epsilon (Range a) where+instance (BoundedField a, Ord a, Epsilon a) => Epsilon (Range a) where nearZero (Range l u) = nearZero (l - u) aboutEqual (Range l u) (Range l' u')= aboutEqual l l' && aboutEqual u u' @@ -228,7 +228,7 @@ upper (Range _ u) = u singleton a = Range a a type Grid (Range a) = Int- grid :: FromInteger a => Pos -> Range a -> Int -> [a]+ grid :: Pos -> Range a -> Int -> [a] grid o s n = (+ if o==MidPos then step/(one+one) else zero) <$> posns where posns = (lower s +) . (step *) . fromIntegral <$> [i0..i1]@@ -243,13 +243,16 @@ where ps = grid OuterPos r n +instance (Ord a, BoundedField a, FromInteger a) => Semigroup (Range a) where+ (<>) = union+ instance (Ord a, BoundedField a, FromInteger a) => Monoid (Range a) where mempty = nul- mappend = union+ mappend = (<>) -- | 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-gridSensible :: (Fractional a, Ord a, FromInteger a, QuotientField a, ExpField a) =>+gridSensible :: (FromInteger a, Fractional a, Ord a, QuotientField a, ExpField a) => Pos -> Range a -> Int -> [a] gridSensible tp (Range l u) n = (+ if tp==MidPos then step/two else zero) <$> posns
src/NumHask/RangeD.hs view
@@ -1,7 +1,11 @@ {-# LANGUAGE GeneralizedNewtypeDeriving #-} {-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveFoldable #-}+{-# LANGUAGE DeriveFunctor #-} {-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE DeriveTraversable #-} {-# LANGUAGE ExtendedDefaultRules #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE InstanceSigs #-} {-# LANGUAGE MultiParamTypeClasses #-}
src/NumHask/Rect.hs view
@@ -103,56 +103,56 @@ instance Traversable1 Rect where traverse1 f (Rect a b c d) = Rect <$> f a <.> f b <.> f c <.> f d -instance (Ord a, BoundedField a, FromInteger a) =>+instance (Ord a) => AdditiveMagma (Rect a) where plus (Ranges x0 y0) (Ranges x1 y1) = Ranges (x0 `plus` x1) (y0 `plus` y1) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (Ord a, BoundedField a) => AdditiveUnital (Rect a) where zero = Ranges zero zero -instance (Ord a, FromInteger a, BoundedField a) =>+instance (Ord a) => AdditiveAssociative (Rect a) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (Ord a) => AdditiveCommutative (Rect a) -instance (Ord a, FromInteger a, BoundedField a) =>+instance (Ord a) => AdditiveIdempotent (Rect a) -instance (Ord a, BoundedField a, FromInteger a) => Additive (Rect a)+instance (Ord a, BoundedField a) => Additive (Rect a) -instance (Ord a, FromInteger a, BoundedField a) =>+instance (Ord a) => AdditiveInvertible (Rect a) where negate (Ranges x y) = Ranges (negate x) (negate y) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (Ord a, BoundedField a) => AdditiveGroup (Rect a) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeMagma (Rect a) where times (Ranges x0 y0) (Ranges x1 y1) = Ranges (x0 `times` x1) (y0 `times` y1) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeUnital (Rect a) where one = Ranges one one -instance (Ord a, FromInteger a, BoundedField a) =>+instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeAssociative (Rect a) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeCommutative (Rect a) -instance (Ord a, BoundedField a, FromInteger a) => Multiplicative (Rect a)+instance (FromInteger a, Ord a, BoundedField a) => Multiplicative (Rect a) -instance (Ord a, FromInteger a, BoundedField a) =>+instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeInvertible (Rect a) where recip (Ranges x y) = Ranges (recip x) (recip y) -instance (Ord a, BoundedField a, FromInteger a) =>+instance (FromInteger a, Ord a, BoundedField a) => MultiplicativeGroup (Rect a) -instance (AdditiveInvertible a, BoundedField a, Ord a, FromInteger a) =>+instance (FromInteger a, AdditiveInvertible a, BoundedField a, Ord a) => Signed (Rect a) where sign (Ranges l u) = Ranges (sign l) (sign u) abs (Ranges l u) = Ranges (sign l * l) (sign u * u)@@ -160,7 +160,7 @@ instance (AdditiveGroup a) => Normed (Rect a) (Pair a) where size (Ranges l u) = Pair (size l) (size u) -instance (BoundedField a, Ord a, FromInteger a, Epsilon a) => Epsilon (Rect a) where+instance (BoundedField a, Ord a, Epsilon a) => Epsilon (Rect a) where nearZero (Ranges a b) = nearZero a && nearZero b aboutEqual (Ranges a b) (Ranges a' b')= aboutEqual a a' && aboutEqual b b' @@ -182,7 +182,7 @@ index (Rect _ _ c _) (True, False) = c index (Rect _ _ _ d) (True, True) = d -instance (Signed a, FromInteger a, Ord a, BoundedField a) => Space (Rect a) where+instance (FromInteger a, Signed a, Ord a, BoundedField a) => Space (Rect a) where type Element (Rect a) = Pair a nul = Ranges nul nul union (Ranges a b) (Ranges c d) = Ranges (a `union` c) (b `union` d)@@ -190,7 +190,7 @@ upper (Rect _ u0 _ u1) = Pair u0 u1 singleton (Pair x y) = Rect x x y y type Grid (Rect a) = Pair Int- grid :: (FromInteger a) => Pos -> Rect a -> Pair Int -> [Pair a]+ grid :: Pos -> Rect a -> Pair Int -> [Pair a] grid o s n = (+ if o == MidPos then step / (one + one)@@ -217,9 +217,12 @@ sx = width rX / fromIntegral stepX sy = width rY / fromIntegral stepY -instance (Signed a, Ord a, BoundedField a, FromInteger a) => Monoid (Rect a) where+instance (FromInteger a, Signed a, Ord a, BoundedField a) => Semigroup (Rect a) where+ (<>) = union++instance (FromInteger a, Signed a, Ord a, BoundedField a) => Monoid (Rect a) where mempty = nul- mappend = union+ mappend = (<>) instance (Arbitrary a) => Arbitrary (Rect a) where arbitrary = do@@ -231,12 +234,12 @@ rnf (Ranges a b) = rnf a `seq` rnf b -- | create a list of pairs representing the lower left and upper right cormners of a rectangle.-corners :: (Signed a, FromInteger a, BoundedField a, Ord a) => Rect a -> [Pair a]+corners :: (FromInteger a, Signed a, BoundedField a, Ord a) => Rect a -> [Pair a] corners r = [lower r, upper r] -- | project a Rect from an old range to a new one projectRect ::- (Signed a, FromInteger a, Ord a, BoundedField a)+ (FromInteger a, Signed a, Ord a, BoundedField a) => Rect a -> Rect a -> Rect a
src/NumHask/Space.hs view
@@ -1,5 +1,8 @@ {-# LANGUAGE CPP #-}+{-# LANGUAGE DeriveGeneric #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -Wall #-} #if ( __GLASGOW_HASKELL__ < 820 )
stack.yaml view
@@ -1,6 +1,8 @@-resolver: nightly-2017-12-27+resolver: nightly-2018-04-05 packages: - . -extra-deps: []+extra-deps:+ - numhask-prelude-0.0.1.0+ - numhask-0.2.0.0
test/test.hs view
@@ -1,4 +1,5 @@ {-# LANGUAGE DataKinds #-}+{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -Wall #-} {-# OPTIONS_GHC -fno-warn-incomplete-patterns #-}@@ -56,11 +57,7 @@ , Signed (Element s) , Ord (Element s) , Normed s (Element s)- , Signed s , Space s- , Epsilon s- , Eq s- , Multiplicative s ) => Element s -> [Law2 s (Element s)]@@ -84,14 +81,11 @@ ] additiveSpaceFuzzyLaws ::- ( Epsilon (Element s)- , Signed (Element s)+ ( Signed (Element s) , Ord (Element s) , Normed s (Element s) , Signed s- , Space s , Epsilon s- , Eq s ) => Element s -> [Law s]@@ -110,14 +104,11 @@ ] multiplicativeSpaceFuzzyLaws ::- ( Epsilon (Element s)- , Signed (Element s)+ ( Signed (Element s) , Ord (Element s) , Normed s (Element s) , Signed s- , Space s , Epsilon s- , Eq s , Multiplicative s ) => Element s@@ -135,14 +126,12 @@ ] multiplicativeGroupSpaceFuzzyLaws ::- ( Epsilon (Element s)- , Signed (Element s)+ ( Signed (Element s) , Ord (Element s) , Normed s (Element s) , Signed s , Space s , Epsilon s- , Eq s , MultiplicativeGroup s ) => Element s@@ -163,10 +152,8 @@ , Ord a , Normed (r a) a , Signed (r a)- , Multiplicative (r a) , MultiplicativeGroup (r a) , Epsilon (r a)- , Eq (r a) ) => a -> [Law (r a)]@@ -224,7 +211,7 @@ ( Ord a , Semiring a , Epsilon a- , Eq a)+ ) => [Law a] semiringFuzzyLaws = additiveLaws <> distributionFuzzyLaws