discrimination 0.2.1 → 0.3
raw patch · 4 files changed
+25/−9 lines, 4 filesdep ~containersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: containers
API changes (from Hackage documentation)
- Data.Discrimination.Grouping: instance (Data.Discrimination.Grouping.Grouping a, GHC.Real.Integral a) => Data.Discrimination.Grouping.Grouping (GHC.Real.Ratio a)
+ Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping a => Data.Discrimination.Grouping.Grouping (GHC.Real.Ratio a)
- Data.Discrimination: grouping :: Grouping a => Group a
+ Data.Discrimination: grouping :: (Grouping a, Deciding Grouping a) => Group a
- Data.Discrimination: grouping1 :: Grouping1 f => Group a -> Group (f a)
+ Data.Discrimination: grouping1 :: (Grouping1 f, Deciding1 Grouping f) => Group a -> Group (f a)
- Data.Discrimination: sorting :: Sorting a => Sort a
+ Data.Discrimination: sorting :: (Sorting a, Deciding Sorting a) => Sort a
- Data.Discrimination: sorting1 :: Sorting1 f => Sort a -> Sort (f a)
+ Data.Discrimination: sorting1 :: (Sorting1 f, Deciding1 Sorting f) => Sort a -> Sort (f a)
- Data.Discrimination.Grouping: grouping :: Grouping a => Group a
+ Data.Discrimination.Grouping: grouping :: (Grouping a, Deciding Grouping a) => Group a
- Data.Discrimination.Grouping: grouping1 :: Grouping1 f => Group a -> Group (f a)
+ Data.Discrimination.Grouping: grouping1 :: (Grouping1 f, Deciding1 Grouping f) => Group a -> Group (f a)
- Data.Discrimination.Sorting: sorting :: Sorting a => Sort a
+ Data.Discrimination.Sorting: sorting :: (Sorting a, Deciding Sorting a) => Sort a
- Data.Discrimination.Sorting: sorting1 :: Sorting1 f => Sort a -> Sort (f a)
+ Data.Discrimination.Sorting: sorting1 :: (Sorting1 f, Deciding1 Sorting f) => Sort a -> Sort (f a)
Files
- CHANGELOG.markdown +4/−0
- discrimination.cabal +6/−6
- src/Data/Discrimination/Grouping.hs +6/−0
- src/Data/Discrimination/Sorting.hs +9/−3
CHANGELOG.markdown view
@@ -1,3 +1,7 @@+## 0.3++* Fixed a corner case where `conquer` would lie and return an empty equivalence class when fed no inputs.+ ## 0.2.1 * `promises` 0.3 support
discrimination.cabal view
@@ -1,8 +1,8 @@ name: discrimination category: Data, Sorting-version: 0.2.1+version: 0.3 license: BSD3-cabal-version: >= 1.22+cabal-version: >= 1.10 license-file: LICENSE author: Edward A. Kmett maintainer: Edward A. Kmett <ekmett@gmail.com>@@ -11,7 +11,7 @@ bug-reports: http://github.com/ekmett/discrimination/issues copyright: Copyright (C) 2014-2015 Edward A. Kmett build-type: Simple-tested-with: GHC == 7.10.1+tested-with: GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.1 synopsis: Fast generic linear-time sorting, joins and container construction. description: This package provides fast, generic, linear-time discrimination and sorting.@@ -44,7 +44,7 @@ build-depends: array >= 0.5 && < 0.6,- base >= 4.7 && < 5,+ base >= 4.8 && < 5, containers >= 0.4 && < 0.6, contravariant >= 1.3.1 && < 2, deepseq >= 1.3 && < 1.5,@@ -56,7 +56,7 @@ semigroups >= 0.16.2 && < 1, transformers >= 0.2 && < 0.6, transformers-compat >= 0.3 && < 1,- vector >= 0.10 && < 0.12,+ vector >= 0.10 && < 0.13, void >= 0.5 && < 1 benchmark wordmap@@ -66,7 +66,7 @@ hs-source-dirs: benchmarks default-language: Haskell2010 build-depends:- base >= 4.8,+ base >= 4.9, containers, criterion, deepseq,
src/Data/Discrimination/Grouping.hs view
@@ -154,8 +154,14 @@ instance (Grouping a, Grouping b) => Grouping (Either a b) instance Grouping a => Grouping (Complex a) where grouping = divide (\(a :+ b) -> (a, b)) grouping grouping++#if __GLASGOW_HASKELL__ >= 800+instance Grouping a => Grouping (Ratio a) where+#else instance (Grouping a, Integral a) => Grouping (Ratio a) where+#endif grouping = divide (\r -> (numerator r, denominator r)) grouping grouping+ instance (Grouping1 f, Grouping1 g, Grouping a) => Grouping (Compose f g a) where grouping = getCompose `contramap` grouping1 (grouping1 grouping)
src/Data/Discrimination/Sorting.hs view
@@ -69,6 +69,12 @@ newtype Sort a = Sort { runSort :: forall b. [(a,b)] -> [[b]] } deriving Typeable +mkSort :: (forall b. [(a, b)] -> [[b]]) -> Sort a+mkSort f = Sort $ \xs -> case xs of+ [] -> []+ [(_, v)] -> [[v]]+ _ -> f xs+ #ifndef HLINT type role Sort representational #endif@@ -77,13 +83,13 @@ contramap f (Sort g) = Sort $ g . fmap (first f) instance Divisible Sort where- conquer = Sort $ return . fmap snd+ conquer = mkSort $ return . fmap snd divide k (Sort l) (Sort r) = Sort $ \xs -> l [ (b, (c, d)) | (a,d) <- xs, let (b, c) = k a] >>= r instance Decidable Sort where lose k = Sort $ fmap (absurd.k.fst)- choose f (Sort l) (Sort r) = Sort $ \xs -> let+ choose f (Sort l) (Sort r) = mkSort $ \xs -> let ys = fmap (first f) xs in l [ (k,v) | (Left k, v) <- ys] ++ r [ (k,v) | (Right k, v) <- ys]@@ -196,7 +202,7 @@ -------------------------------------------------------------------------------- sortingNat :: Int -> Sort Int-sortingNat n = Sort $ \xs -> List.filter (not . List.null) (bdiscNat n upd xs) where+sortingNat n = mkSort $ \xs -> List.filter (not . List.null) (bdiscNat n upd xs) where upd vs v = v : vs {-# INLINE sortingNat #-}