packages feed

discrimination 0.3 → 0.4

raw patch · 6 files changed

+41/−10 lines, 6 filesdep +integer-gmpdep ~basedep ~hashabledep ~primitivesetup-changedPVP ok

version bump matches the API change (PVP)

Dependencies added: integer-gmp

Dependency ranges changed: base, hashable, primitive

API changes (from Hackage documentation)

- Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping a => Data.Discrimination.Grouping.Grouping (GHC.Base.Maybe a)
- Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping1 GHC.Base.Maybe
- Data.Discrimination.Grouping: instance Data.Semigroup.Semigroup (Data.Discrimination.Grouping.Group a)
- Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting a => Data.Discrimination.Sorting.Sorting (GHC.Base.Maybe a)
- Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting1 GHC.Base.Maybe
- Data.Discrimination.Sorting: instance Data.Semigroup.Semigroup (Data.Discrimination.Sorting.Sort a)
+ Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping ()
+ Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping GHC.Integer.Type.Integer
+ Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping GHC.Natural.Natural
+ Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping a => Data.Discrimination.Grouping.Grouping (GHC.Maybe.Maybe a)
+ Data.Discrimination.Grouping: instance Data.Discrimination.Grouping.Grouping1 GHC.Maybe.Maybe
+ Data.Discrimination.Grouping: instance GHC.Base.Semigroup (Data.Discrimination.Grouping.Group a)
+ Data.Discrimination.Grouping: word8s :: Integer -> [Word8]
+ Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting ()
+ Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting GHC.Integer.Type.Integer
+ Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting GHC.Natural.Natural
+ Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting a => Data.Discrimination.Sorting.Sorting (GHC.Maybe.Maybe a)
+ Data.Discrimination.Sorting: instance Data.Discrimination.Sorting.Sorting1 GHC.Maybe.Maybe
+ Data.Discrimination.Sorting: instance GHC.Base.Semigroup (Data.Discrimination.Sorting.Sort a)
- Data.Discrimination: class Grouping a where grouping = deciding (Proxy :: Proxy Grouping) grouping
+ Data.Discrimination: class Grouping a
- Data.Discrimination: class Grouping1 f where grouping1 = deciding1 (Proxy :: Proxy Grouping) grouping
+ Data.Discrimination: class Grouping1 f
- Data.Discrimination: class Grouping a => Sorting a where sorting = deciding (Proxy :: Proxy Sorting) sorting
+ Data.Discrimination: class Grouping a => Sorting a
- Data.Discrimination: class Grouping1 f => Sorting1 f where sorting1 = deciding1 (Proxy :: Proxy Sorting) sorting
+ Data.Discrimination: class Grouping1 f => Sorting1 f
- Data.Discrimination.Grouping: class Grouping a where grouping = deciding (Proxy :: Proxy Grouping) grouping
+ Data.Discrimination.Grouping: class Grouping a
- Data.Discrimination.Grouping: class Grouping1 f where grouping1 = deciding1 (Proxy :: Proxy Grouping) grouping
+ Data.Discrimination.Grouping: class Grouping1 f
- Data.Discrimination.Internal.SmallArray: SmallArray :: (SmallArray# a) -> SmallArray a
+ Data.Discrimination.Internal.SmallArray: SmallArray :: SmallArray# a -> SmallArray a
- Data.Discrimination.Internal.SmallArray: SmallMutableArray :: (SmallMutableArray# s a) -> SmallMutableArray s a
+ Data.Discrimination.Internal.SmallArray: SmallMutableArray :: SmallMutableArray# s a -> SmallMutableArray s a
- Data.Discrimination.Sorting: class Grouping a => Sorting a where sorting = deciding (Proxy :: Proxy Sorting) sorting
+ Data.Discrimination.Sorting: class Grouping a => Sorting a
- Data.Discrimination.Sorting: class Grouping1 f => Sorting1 f where sorting1 = deciding1 (Proxy :: Proxy Sorting) sorting
+ Data.Discrimination.Sorting: class Grouping1 f => Sorting1 f

Files

CHANGELOG.markdown view
@@ -1,3 +1,7 @@+## 0.4++* Added `Natural`, `Integer` and `()` discrimination+ ## 0.3  * Fixed a corner case where `conquer` would lie and return an empty equivalence class when fed no inputs.
README.markdown view
@@ -4,7 +4,7 @@ [![Hackage](https://img.shields.io/hackage/v/discrimination.svg)](https://hackage.haskell.org/package/discrimination) [![Build Status](https://secure.travis-ci.org/ekmett/discrimination.png?branch=master)](http://travis-ci.org/ekmett/discrimination)  This package provides linear time sorting, partitioning, and joins for a wide array of Haskell data types. This work is based on a-"final encoding" of the ideas presented in [multiple](http://www.diku.dk/hjemmesider/ansatte/henglein/papers/henglein2011a.pdf) [papers](http://www.diku.dk/hjemmesider/ansatte/henglein/papers/henglein2011c.pdf) and [talks](https://www.youtube.com/watch?v=sz9ZlZIRDAg) by [Fritz Henglein](http://www.diku.dk/hjemmesider/ansatte/henglein/).+"final encoding" of the ideas presented in [multiple](http://hjemmesider.diku.dk/~henglein/papers/henglein2011a.pdf) [papers](http://hjemmesider.diku.dk/~henglein/papers/henglein2011c.pdf) and [talks](https://www.youtube.com/watch?v=sz9ZlZIRDAg) by [Fritz Henglein](http://hjemmesider.diku.dk/~henglein).  By adopting a final encoding we can enjoy many instances for standard classes, lawfully, without quotienting. 
− Setup.hs
@@ -1,2 +0,0 @@-import Distribution.Simple-main = defaultMain
discrimination.cabal view
@@ -1,6 +1,6 @@ name:          discrimination category:      Data, Sorting-version:       0.3+version:       0.4 license:       BSD3 cabal-version: >= 1.10 license-file:  LICENSE@@ -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.3, GHC == 8.0.2, GHC == 8.2.1+tested-with:   GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.2 synopsis:      Fast generic linear-time sorting, joins and container construction. description:   This package provides fast, generic, linear-time discrimination and sorting.@@ -45,12 +45,13 @@   build-depends:     array         >= 0.5    && < 0.6,     base          >= 4.8    && < 5,-    containers    >= 0.4    && < 0.6,+    containers    >= 0.4    && < 0.7,     contravariant >= 1.3.1  && < 2,     deepseq       >= 1.3    && < 1.5,     ghc-prim,     hashable      >= 1.2    && < 1.3,-    primitive     >= 0.6    && < 0.7,+    integer-gmp,+    primitive     >= 0.6.4  && < 0.8,     profunctors   >= 5      && < 6,     promises      >= 0.2    && < 0.4,     semigroups    >= 0.16.2 && < 1,
src/Data/Discrimination/Grouping.hs view
@@ -12,6 +12,7 @@ {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE PartialTypeSignatures #-} {-# OPTIONS_GHC -fno-cse -fno-full-laziness #-}  module Data.Discrimination.Grouping@@ -25,11 +26,13 @@   , runGroup   -- * Internals   , hashing+  , word8s   ) where  import Control.Monad hiding (mapM_) import Control.Monad.Primitive import Control.Monad.ST+import Control.Monad.ST.Unsafe import Data.Complex import Data.Discrimination.Internal.WordMap as WordMap import Data.Foldable hiding (concat)@@ -41,12 +44,16 @@ import Data.Int import Data.Semigroup hiding (Any) import Data.Primitive.MutVar+import Data.Primitive.PrimArray import Data.Promise import Data.Proxy import Data.Ratio import Data.Typeable import Data.Void import Data.Word+import GHC.Integer.GMP.Internals+import GHC.Word+import Numeric.Natural import Prelude hiding (read, concat, mapM_)  -- | Productive Stable Unordered Discriminator@@ -130,9 +137,8 @@   grouping = deciding (Proxy :: Proxy Grouping) grouping #endif -instance Grouping Void where-  grouping = lose id-+instance Grouping Void where grouping = lose id+instance Grouping () where grouping = conquer instance Grouping Word8 where grouping = contramap fromIntegral groupingWord64 instance Grouping Word16 where grouping = contramap fromIntegral groupingWord64 instance Grouping Word32 where grouping = contramap fromIntegral groupingWord64@@ -154,6 +160,17 @@ instance (Grouping a, Grouping b) => Grouping (Either a b) instance Grouping a => Grouping (Complex a) where   grouping = divide (\(a :+ b) -> (a, b)) grouping grouping++instance Grouping Integer where+  grouping = contramap word8s grouping++word8s :: Integer -> [Word8]+word8s i = runST $ unsafeIOToST $ do+  p@(MutablePrimArray mba) :: MutablePrimArray RealWorld Word8 <- newPrimArray (fromIntegral $ W# (sizeInBaseInteger i 256#))+  _ <- exportIntegerToMutableByteArray i mba 0## 1#+  primArrayToList <$> unsafeFreezePrimArray p++instance Grouping Natural where grouping = contramap toInteger grouping  #if __GLASGOW_HASKELL__ >= 800 instance Grouping a => Grouping (Ratio a) where
src/Data/Discrimination/Sorting.hs view
@@ -9,6 +9,7 @@ {-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE MonoLocalBinds #-} {-# OPTIONS_GHC -fno-cse -fno-full-laziness #-} module Data.Discrimination.Sorting   ( Sort(..)@@ -56,6 +57,7 @@ import Data.Typeable import Data.Void import Data.Word+import Numeric.Natural import Prelude hiding (read, concat)  --------------------------------------------------------------------------------@@ -117,6 +119,15 @@   default sorting :: Deciding Sorting a => Sort a   sorting = deciding (Proxy :: Proxy Sorting) sorting #endif++instance Sorting () where+  sorting = conquer++instance Sorting Integer where+  sorting = contramap word8s sorting++instance Sorting Natural where+  sorting = contramap toInteger sorting  instance Sorting Word8 where   sorting = contramap fromIntegral (sortingNat 256)