data-interval 1.0.1 → 1.1.0
raw patch · 4 files changed
+31/−24 lines, 4 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
- Data.Interval: instance (Num r, Ord r) => BoundedJoinSemiLattice (Interval r)
- Data.Interval: instance (Num r, Ord r) => BoundedLattice (Interval r)
- Data.Interval: instance (Num r, Ord r) => BoundedMeetSemiLattice (Interval r)
- Data.Interval: instance (Num r, Ord r) => JoinSemiLattice (Interval r)
- Data.Interval: instance (Num r, Ord r) => Lattice (Interval r)
- Data.Interval: instance (Num r, Ord r) => MeetSemiLattice (Interval r)
- Data.Interval: instance (Num r, Ord r, Data r) => Data (Interval r)
- Data.Interval: instance (Num r, Ord r, Read r) => Read (Interval r)
- Data.Interval: instance (Num r, Ord r, Show r) => Show (Interval r)
- Data.Interval: instance Typeable1 Interval
+ Data.Interval: instance (Ord r, Data r) => Data (Interval r)
+ Data.Interval: instance (Ord r, Read r) => Read (Interval r)
+ Data.Interval: instance (Ord r, Show r) => Show (Interval r)
+ Data.Interval: instance Ord r => BoundedJoinSemiLattice (Interval r)
+ Data.Interval: instance Ord r => BoundedLattice (Interval r)
+ Data.Interval: instance Ord r => BoundedMeetSemiLattice (Interval r)
+ Data.Interval: instance Ord r => JoinSemiLattice (Interval r)
+ Data.Interval: instance Ord r => Lattice (Interval r)
+ Data.Interval: instance Ord r => MeetSemiLattice (Interval r)
+ Data.Interval: instance Typeable Interval
- Data.Interval: (<..<) :: (Ord r, Num r) => EndPoint r -> EndPoint r -> Interval r
+ Data.Interval: (<..<) :: Ord r => EndPoint r -> EndPoint r -> Interval r
- Data.Interval: (<..<=) :: (Ord r, Num r) => EndPoint r -> EndPoint r -> Interval r
+ Data.Interval: (<..<=) :: Ord r => EndPoint r -> EndPoint r -> Interval r
- Data.Interval: (<=..<) :: (Ord r, Num r) => EndPoint r -> EndPoint r -> Interval r
+ Data.Interval: (<=..<) :: Ord r => EndPoint r -> EndPoint r -> Interval r
- Data.Interval: (<=..<=) :: (Ord r, Num r) => EndPoint r -> EndPoint r -> Interval r
+ Data.Interval: (<=..<=) :: Ord r => EndPoint r -> EndPoint r -> Interval r
- Data.Interval: Finite :: !r -> Extended r
+ Data.Interval: Finite :: SrictNotUnpackedr -> Extended r
- Data.Interval: empty :: Num r => Interval r
+ Data.Interval: empty :: Ord r => Interval r
- Data.Interval: hull :: (Ord r, Num r) => Interval r -> Interval r -> Interval r
+ Data.Interval: hull :: Ord r => Interval r -> Interval r -> Interval r
- Data.Interval: hulls :: (Ord r, Num r) => [Interval r] -> Interval r
+ Data.Interval: hulls :: Ord r => [Interval r] -> Interval r
- Data.Interval: intersection :: (Ord r, Num r) => Interval r -> Interval r -> Interval r
+ Data.Interval: intersection :: Ord r => Interval r -> Interval r -> Interval r
- Data.Interval: intersections :: (Ord r, Num r) => [Interval r] -> Interval r
+ Data.Interval: intersections :: Ord r => [Interval r] -> Interval r
- Data.Interval: interval :: (Ord r, Num r) => (EndPoint r, Bool) -> (EndPoint r, Bool) -> Interval r
+ Data.Interval: interval :: Ord r => (EndPoint r, Bool) -> (EndPoint r, Bool) -> Interval r
- Data.Interval: singleton :: (Num r, Ord r) => r -> Interval r
+ Data.Interval: singleton :: Ord r => r -> Interval r
- Data.Interval: whole :: (Num r, Ord r) => Interval r
+ Data.Interval: whole :: Ord r => Interval r
Files
- CHANGELOG.markdown +7/−0
- data-interval.cabal +1/−1
- src/Data/Interval.hs +21/−21
- test/TestInterval.hs +2/−2
CHANGELOG.markdown view
@@ -1,3 +1,10 @@+1.1.0+-----+* remove unnecessary Num constraint from bunch of constructors and operations:+ `interval`, `(<=..<=)`, `(<..<=)`, `(<=..<)`, `(<..<)`, `whole`, `empty`,+ `singleton`, `intersection`, `intersections`, `hull`, `hulls`.+ Thanks to Tad Doxsee for pointing out that.+ 1.0.0 ----- * use extended-reals package for representing endpoints
data-interval.cabal view
@@ -1,5 +1,5 @@ Name: data-interval-Version: 1.0.1+Version: 1.1.0 License: BSD3 License-File: COPYING Author: Masahiro Sakai (masahiro.sakai@gmail.com)
src/Data/Interval.hs view
@@ -123,23 +123,23 @@ instance Hashable r => Hashable (Interval r) where hashWithSalt s (Interval lb ub) = s `hashWithSalt` lb `hashWithSalt` ub -instance (Num r, Ord r) => JoinSemiLattice (Interval r) where+instance (Ord r) => JoinSemiLattice (Interval r) where join = hull -instance (Num r, Ord r) => MeetSemiLattice (Interval r) where+instance (Ord r) => MeetSemiLattice (Interval r) where meet = intersection -instance (Num r, Ord r) => Lattice (Interval r)+instance (Ord r) => Lattice (Interval r) -instance (Num r, Ord r) => BoundedJoinSemiLattice (Interval r) where+instance (Ord r) => BoundedJoinSemiLattice (Interval r) where bottom = empty -instance (Num r, Ord r) => BoundedMeetSemiLattice (Interval r) where+instance (Ord r) => BoundedMeetSemiLattice (Interval r) where top = whole -instance (Num r, Ord r) => BoundedLattice (Interval r)+instance (Ord r) => BoundedLattice (Interval r) -instance (Num r, Ord r, Show r) => Show (Interval r) where+instance (Ord r, Show r) => Show (Interval r) where showsPrec _ x | null x = showString "empty" showsPrec p x = showParen (p > appPrec) $ showString "interval " .@@ -147,7 +147,7 @@ showChar ' ' . showsPrec appPrec1 (upperBound' x) -instance (Num r, Ord r, Read r) => Read (Interval r) where+instance (Ord r, Read r) => Read (Interval r) where readsPrec p r = (readParen (p > appPrec) $ \s0 -> do ("interval",s1) <- lex s0@@ -161,7 +161,7 @@ -- This instance preserves data abstraction at the cost of inefficiency. -- We omit reflection services for the sake of data abstraction. -instance (Num r, Ord r, Data r) => Data (Interval r) where+instance (Ord r, Data r) => Data (Interval r) where gfoldl k z x = z interval `k` lowerBound' x `k` upperBound' x toConstr _ = error "toConstr" gunfold _ _ = error "gunfold"@@ -170,7 +170,7 @@ -- | smart constructor for 'Interval' interval- :: (Ord r, Num r)+ :: (Ord r) => (EndPoint r, Bool) -- ^ lower bound and whether it is included -> (EndPoint r, Bool) -- ^ upper bound and whether it is included -> Interval r@@ -185,7 +185,7 @@ -- | closed interval [@l@,@u@] (<=..<=)- :: (Ord r, Num r)+ :: (Ord r) => EndPoint r -- ^ lower bound @l@ -> EndPoint r -- ^ upper bound @u@ -> Interval r@@ -193,7 +193,7 @@ -- | left-open right-closed interval (@l@,@u@] (<..<=)- :: (Ord r, Num r)+ :: (Ord r) => EndPoint r -- ^ lower bound @l@ -> EndPoint r -- ^ upper bound @u@ -> Interval r@@ -201,7 +201,7 @@ -- | left-closed right-open interval [@l@, @u@) (<=..<)- :: (Ord r, Num r)+ :: (Ord r) => EndPoint r -- ^ lower bound @l@ -> EndPoint r -- ^ upper bound @u@ -> Interval r@@ -209,26 +209,26 @@ -- | open interval (@l@, @u@) (<..<)- :: (Ord r, Num r)+ :: (Ord r) => EndPoint r -- ^ lower bound @l@ -> EndPoint r -- ^ upper bound @u@ -> Interval r (<..<) lb ub = interval (lb, False) (ub, False) -- | whole real number line (-∞, ∞)-whole :: (Num r, Ord r) => Interval r+whole :: Ord r => Interval r whole = Interval (NegInf, False) (PosInf, False) -- | empty (contradicting) interval-empty :: Num r => Interval r+empty :: Ord r => Interval r empty = Interval (PosInf, False) (NegInf, False) -- | singleton set \[x,x\]-singleton :: (Num r, Ord r) => r -> Interval r+singleton :: Ord r => r -> Interval r singleton x = interval (Finite x, True) (Finite x, True) -- | intersection of two intervals-intersection :: forall r. (Ord r, Num r) => Interval r -> Interval r -> Interval r+intersection :: forall r. Ord r => Interval r -> Interval r -> Interval r intersection (Interval l1 u1) (Interval l2 u2) = interval (maxLB l1 l2) (minUB u1 u2) where maxLB :: (EndPoint r, Bool) -> (EndPoint r, Bool) -> (EndPoint r, Bool)@@ -251,11 +251,11 @@ -- | intersection of a list of intervals. -- -- Since 0.6.0-intersections :: (Ord r, Num r) => [Interval r] -> Interval r+intersections :: Ord r => [Interval r] -> Interval r intersections xs = foldl' intersection whole xs -- | convex hull of two intervals-hull :: forall r. (Ord r, Num r) => Interval r -> Interval r -> Interval r+hull :: forall r. Ord r => Interval r -> Interval r -> Interval r hull x1 x2 | null x1 = x2 | null x2 = x1@@ -281,7 +281,7 @@ -- | convex hull of a list of intervals. -- -- Since 0.6.0-hulls :: (Ord r, Num r) => [Interval r] -> Interval r+hulls :: Ord r => [Interval r] -> Interval r hulls xs = foldl' hull empty xs -- | Is the interval empty?
test/TestInterval.hs view
@@ -109,7 +109,7 @@ (Interval.intersection a b == a) == Interval.isSubsetOf a b -case_intersections_empty_list = Interval.intersections [] @?= Interval.whole+case_intersections_empty_list = Interval.intersections [] @?= (Interval.whole :: Interval Rational) prop_intersections_singleton_list = forAll intervals $ \a -> Interval.intersections [a] == a@@ -158,7 +158,7 @@ (Interval.hull a b == b) == Interval.isSubsetOf a b -case_hulls_empty_list = Interval.hulls [] @?= Interval.empty+case_hulls_empty_list = Interval.hulls [] @?= (Interval.empty :: Interval Rational) prop_hulls_singleton_list = forAll intervals $ \a -> Interval.hulls [a] == a