easytensor-2.1.1.0: Pure, type-indexed haskell vector, matrix, and tensor library.
Safe HaskellNone
LanguageHaskell2010

Numeric.Subroutine.Sort

Synopsis

Documentation

class BoundedDim n => SortBy n where Source #

Methods

sortByInplace Source #

Arguments

:: PrimBytes t 
=> (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering)

must not modify state!

-> STDataFrame s t (n ': ns) 
-> ST s () 

Note, Inplace here means the input frame is modified. It does not mean the algorithm does not use extra space (it does use).

Instances

Instances details
KnownDim n => SortBy (n :: Nat) Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (n ': ns) -> ST s () Source #

SortBy 0 Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (0 ': ns) -> ST s () Source #

SortBy 1 Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (1 ': ns) -> ST s () Source #

SortBy 2 Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (2 ': ns) -> ST s () Source #

SortBy 3 Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (3 ': ns) -> ST s () Source #

SortBy 4 Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (4 ': ns) -> ST s () Source #

BoundedDim xn => SortBy (xn :: XNat) Source # 
Instance details

Defined in Numeric.Subroutine.Sort

Methods

sortByInplace :: forall t s (ns :: [k]). PrimBytes t => (STDataFrame s t ns -> STDataFrame s t ns -> ST s Ordering) -> STDataFrame s t (xn ': ns) -> ST s () Source #

sortBy :: forall (t :: Type) n ns. (SortableDataFrame t (n ': ns), SortBy n) => (DataFrame t ns -> DataFrame t ns -> Ordering) -> DataFrame t (n ': ns) -> DataFrame t (n ': ns) Source #

Sort a DataFrame along the first dimension using given comparison function.

sort :: forall (t :: Type) n ns. (SortableDataFrame t (n ': ns), Ord t, SortBy n) => DataFrame t (n ': ns) -> DataFrame t (n ': ns) Source #

Sort a DataFrame along the first dimension.

Note: the elements (which are of type DataFrame t ns) are compared lexicographically.

type family SortableDataFrame (t :: Type) (ns :: [k]) :: Constraint where ... Source #

The required context for sorting a DataFrame is slightly different for Nat and XNat indexed arrays. This type family abstracts away the difference.

Equations

SortableDataFrame t (n ': ns :: [Nat]) = (PrimArray t (DataFrame t ns), PrimArray t (DataFrame t (n ': ns))) 
SortableDataFrame t (n ': ns :: [XNat]) = PrimBytes t