discrimination-0.3: Fast generic linear-time sorting, joins and container construction.

Safe HaskellTrustworthy
LanguageHaskell2010

Data.Discrimination.Grouping

Contents

Synopsis

Documentation

newtype Group a #

Productive Stable Unordered Discriminator

Constructors

Group 

Fields

Instances
Divisible Group # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

divide :: (a -> (b, c)) -> Group b -> Group c -> Group a #

conquer :: Group a #

Decidable Group # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

lose :: (a -> Void) -> Group a #

choose :: (a -> Either b c) -> Group b -> Group c -> Group a #

Contravariant Group # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

contramap :: (a -> b) -> Group b -> Group a #

(>$) :: b -> Group b -> Group a #

Discriminating Group # 
Instance details

Defined in Data.Discrimination.Class

Methods

disc :: Group a -> [(a, b)] -> [[b]] #

Semigroup (Group a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

(<>) :: Group a -> Group a -> Group a #

sconcat :: NonEmpty (Group a) -> Group a #

stimes :: Integral b => b -> Group a -> Group a #

Monoid (Group a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

mempty :: Group a #

mappend :: Group a -> Group a -> Group a #

mconcat :: [Group a] -> Group a #

class Grouping a where #

Eq equipped with a compatible stable unordered discriminator.

Methods

grouping :: Group a #

For every surjection f,

contramap f groupinggrouping

grouping :: Deciding Grouping a => Group a #

For every surjection f,

contramap f groupinggrouping
Instances
Grouping Bool # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Bool #

Grouping Char # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Char #

Grouping Int # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Int #

Grouping Int8 # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Int8 #

Grouping Int16 # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Int16 #

Grouping Int32 # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Int32 #

Grouping Int64 # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Int64 #

Grouping Word # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Word #

Grouping Word8 # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Word8 #

Grouping Word16 # 
Instance details

Defined in Data.Discrimination.Grouping

Grouping Word32 # 
Instance details

Defined in Data.Discrimination.Grouping

Grouping Word64 # 
Instance details

Defined in Data.Discrimination.Grouping

Grouping Void # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group Void #

Grouping a => Grouping [a] # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group [a] #

Grouping a => Grouping (Maybe a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (Maybe a) #

Grouping a => Grouping (Ratio a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (Ratio a) #

Grouping a => Grouping (Complex a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (Complex a) #

(Grouping a, Grouping b) => Grouping (Either a b) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (Either a b) #

(Grouping a, Grouping b) => Grouping (a, b) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (a, b) #

(Grouping a, Grouping b, Grouping c) => Grouping (a, b, c) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (a, b, c) #

(Grouping a, Grouping b, Grouping c, Grouping d) => Grouping (a, b, c, d) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (a, b, c, d) #

(Grouping1 f, Grouping1 g, Grouping a) => Grouping (Compose f g a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping :: Group (Compose f g a) #

class Grouping1 f where #

Methods

grouping1 :: Group a -> Group (f a) #

grouping1 :: Deciding1 Grouping f => Group a -> Group (f a) #

Instances
Grouping1 [] # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a -> Group [a] #

Grouping1 Maybe # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a -> Group (Maybe a) #

Grouping1 Complex # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a -> Group (Complex a) #

Grouping a => Grouping1 (Either a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a0 -> Group (Either a a0) #

Grouping a => Grouping1 ((,) a) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a0 -> Group (a, a0) #

(Grouping a, Grouping b) => Grouping1 ((,,) a b) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a0 -> Group (a, b, a0) #

(Grouping a, Grouping b, Grouping c) => Grouping1 ((,,,) a b c) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a0 -> Group (a, b, c, a0) #

(Grouping1 f, Grouping1 g) => Grouping1 (Compose f g) # 
Instance details

Defined in Data.Discrimination.Grouping

Methods

grouping1 :: Group a -> Group (Compose f g a) #

Combinators

nub :: Grouping a => [a] -> [a] #

O(n). This upgrades nub from Data.List from O(n^2) to O(n) by using productive unordered discrimination.

nub = nubWith id
nub as = head <$> group as

nubWith :: Grouping b => (a -> b) -> [a] -> [a] #

O(n). Online nub with a Schwartzian transform.

nubWith f as = head <$> groupWith f as

group :: Grouping a => [a] -> [[a]] #

O(n). Similar to group, except we do not require groups to be clustered.

This combinator still operates in linear time, at the expense of storing history.

The result equivalence classes are not sorted, but the grouping is stable.

group = groupWith id

groupWith :: Grouping b => (a -> b) -> [a] -> [[a]] #

O(n). This is a replacement for groupWith using discrimination.

The result equivalence classes are not sorted, but the grouping is stable.

groupingEq :: Grouping a => a -> a -> Bool #

Valid definition for (==) in terms of Grouping.

runGroup :: Group a -> [(a, b)] -> [[b]] #

Internals

hashing :: Hashable a => Group a #

This may be useful for pragmatically accelerating a grouping structure by preclassifying by a hash function

Semantically,

grouping = hashing <> grouping