-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Sort small lists with sorting network. -- -- Functions that sort small (2~16 elements) lists or homogenous tuples. @package sorting-network @version 0.2.1.0 module Data.SortingNetwork.Types -- | A function that takes as argument number of elements and produces -- zero-based index pairs that we should compare to simulate a sorting -- network sequentially. Should return Nothing if a network of the -- input size is not supported. type MkPairs = Int -> Maybe [(Int, Int)] module Data.SortingNetwork.TH -- | gMkSortBy mkPairs n mkP mkE generates a function that sorts -- elements using sorting network. -- -- mkP :: [Pat] -> Pat and mkE :: [Exp] -> Exp -- deals with unpacking input value and packing final results -- respectively. This generalization allows us to deal with lists, -- tuples, and unboxed-tuples all at once. gMkSortBy :: MkPairs -> Int -> ([Pat] -> Pat) -> ([Exp] -> Exp) -> Q Exp -- | mkUnsafeSortListBy mkPairs n generates an expression of type -- (a -> a -> Ordering) -> [a] -> [a]. -- -- Note that resulting function is partial and requires input list to -- contain exactly n elements. mkUnsafeSortListBy :: MkPairs -> Int -> ExpQ -- | mkSortTupBy mkPairs n generates an expression of type (a -- -> a -> Ordering) -> (a, a, ...) -> (a, a, ...). -- -- Where the input and output tuple (a, a, ...) contains -- n elements. mkSortTupBy :: MkPairs -> Int -> ExpQ mkUnsafeSortListByFns :: MkPairs -> [Int] -> Q [Dec] mkSortTupByFns :: MkPairs -> [Int] -> Q [Dec] -- | Functions that sorts mutable vectors using sorting network. module Data.SortingNetwork.MutableVector -- | Sorts a mutable vector by applying compare-and-swap operations -- generated through MkPairs. -- -- Raises error if vector size cannot be handled by the sorting network. unsafeSortBy :: (PrimMonad m, MVector v e) => MkPairs -> (e -> e -> Ordering) -> v (PrimState m) e -> m () -- | Safe version of unsafeSortBy. -- -- This function either returns input vector reference upon successful -- sorting or Nothing if the vector size cannot be handled. maySortBy :: (PrimMonad m, MVector v e) => MkPairs -> (e -> e -> Ordering) -> v (PrimState m) e -> m (Maybe (v (PrimState m) e)) -- | Functions that generate sorting networks given a input size. module Data.SortingNetwork.Compares -- | Batcher's odd-even mergesort -- -- Adopted from Pseudocode section of -- https://en.wikipedia.org/wiki/Batcher_odd%E2%80%93even_mergesort. oddEvenMerge :: MkPairs -- | Sorting networks that are optimal by size. -- -- Source from -- https://bertdobbelaere.github.io/sorting_networks.html. optimal :: MkPairs module Data.SortingNetwork.OptimalSize unsafeSortList16By :: forall a_aaFm. (a_aaFm -> a_aaFm -> Ordering) -> [a_aaFm] -> [a_aaFm] unsafeSortList15By :: forall a_aaD4. (a_aaD4 -> a_aaD4 -> Ordering) -> [a_aaD4] -> [a_aaD4] unsafeSortList14By :: forall a_aaAV. (a_aaAV -> a_aaAV -> Ordering) -> [a_aaAV] -> [a_aaAV] unsafeSortList13By :: forall a_aayX. (a_aayX -> a_aayX -> Ordering) -> [a_aayX] -> [a_aayX] unsafeSortList12By :: forall a_aaxc. (a_aaxc -> a_aaxc -> Ordering) -> [a_aaxc] -> [a_aaxc] unsafeSortList11By :: forall a_aavE. (a_aavE -> a_aavE -> Ordering) -> [a_aavE] -> [a_aavE] unsafeSortList10By :: forall a_aauf. (a_aauf -> a_aauf -> Ordering) -> [a_aauf] -> [a_aauf] unsafeSortList9By :: forall a_aat3. (a_aat3 -> a_aat3 -> Ordering) -> [a_aat3] -> [a_aat3] unsafeSortList8By :: forall a_aas0. (a_aas0 -> a_aas0 -> Ordering) -> [a_aas0] -> [a_aas0] unsafeSortList7By :: forall a_aara. (a_aara -> a_aara -> Ordering) -> [a_aara] -> [a_aara] unsafeSortList6By :: forall a_aaqr. (a_aaqr -> a_aaqr -> Ordering) -> [a_aaqr] -> [a_aaqr] unsafeSortList5By :: forall a_aapR. (a_aapR -> a_aapR -> Ordering) -> [a_aapR] -> [a_aapR] unsafeSortList4By :: forall a_aapo. (a_aapo -> a_aapo -> Ordering) -> [a_aapo] -> [a_aapo] unsafeSortList3By :: forall a_aap4. (a_aap4 -> a_aap4 -> Ordering) -> [a_aap4] -> [a_aap4] unsafeSortList2By :: forall a_aaoP. (a_aaoP -> a_aaoP -> Ordering) -> [a_aaoP] -> [a_aaoP] sortTup16By :: (a_ab83 -> a_ab83 -> Ordering) -> (a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83) -> (a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83, a_ab83) sortTup15By :: (a_ab5L -> a_ab5L -> Ordering) -> (a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L) -> (a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L, a_ab5L) sortTup14By :: (a_ab3C -> a_ab3C -> Ordering) -> (a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C) -> (a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C, a_ab3C) sortTup13By :: (a_ab1E -> a_ab1E -> Ordering) -> (a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E) -> (a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E, a_ab1E) sortTup12By :: (a_aaZT -> a_aaZT -> Ordering) -> (a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT) -> (a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT, a_aaZT) sortTup11By :: (a_aaYl -> a_aaYl -> Ordering) -> (a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl) -> (a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl, a_aaYl) sortTup10By :: (a_aaWW -> a_aaWW -> Ordering) -> (a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW) -> (a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW, a_aaWW) sortTup9By :: (a_aaVK -> a_aaVK -> Ordering) -> (a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK) -> (a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK, a_aaVK) sortTup8By :: (a_aaUH -> a_aaUH -> Ordering) -> (a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH) -> (a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH, a_aaUH) sortTup7By :: (a_aaTR -> a_aaTR -> Ordering) -> (a_aaTR, a_aaTR, a_aaTR, a_aaTR, a_aaTR, a_aaTR, a_aaTR) -> (a_aaTR, a_aaTR, a_aaTR, a_aaTR, a_aaTR, a_aaTR, a_aaTR) sortTup6By :: (a_aaT8 -> a_aaT8 -> Ordering) -> (a_aaT8, a_aaT8, a_aaT8, a_aaT8, a_aaT8, a_aaT8) -> (a_aaT8, a_aaT8, a_aaT8, a_aaT8, a_aaT8, a_aaT8) sortTup5By :: (a_aaSy -> a_aaSy -> Ordering) -> (a_aaSy, a_aaSy, a_aaSy, a_aaSy, a_aaSy) -> (a_aaSy, a_aaSy, a_aaSy, a_aaSy, a_aaSy) sortTup4By :: (a_aaS5 -> a_aaS5 -> Ordering) -> (a_aaS5, a_aaS5, a_aaS5, a_aaS5) -> (a_aaS5, a_aaS5, a_aaS5, a_aaS5) sortTup3By :: (a_aaRL -> a_aaRL -> Ordering) -> (a_aaRL, a_aaRL, a_aaRL) -> (a_aaRL, a_aaRL, a_aaRL) sortTup2By :: (a_aaRw -> a_aaRw -> Ordering) -> (a_aaRw, a_aaRw) -> (a_aaRw, a_aaRw) module Data.SortingNetwork module Data.SortingNetwork.OddEvenMerge unsafeSortList16By :: forall a_argD. (a_argD -> a_argD -> Ordering) -> [a_argD] -> [a_argD] unsafeSortList15By :: forall a_aref. (a_aref -> a_aref -> Ordering) -> [a_aref] -> [a_aref] unsafeSortList14By :: forall a_arc0. (a_arc0 -> a_arc0 -> Ordering) -> [a_arc0] -> [a_arc0] unsafeSortList13By :: forall a_ar9Y. (a_ar9Y -> a_ar9Y -> Ordering) -> [a_ar9Y] -> [a_ar9Y] unsafeSortList12By :: forall a_ar87. (a_ar87 -> a_ar87 -> Ordering) -> [a_ar87] -> [a_ar87] unsafeSortList11By :: forall a_ar6t. (a_ar6t -> a_ar6t -> Ordering) -> [a_ar6t] -> [a_ar6t] unsafeSortList10By :: forall a_ar4Y. (a_ar4Y -> a_ar4Y -> Ordering) -> [a_ar4Y] -> [a_ar4Y] unsafeSortList9By :: forall a_ar3G. (a_ar3G -> a_ar3G -> Ordering) -> [a_ar3G] -> [a_ar3G] unsafeSortList8By :: forall a_ar2x. (a_ar2x -> a_ar2x -> Ordering) -> [a_ar2x] -> [a_ar2x] unsafeSortList7By :: forall a_ar1H. (a_ar1H -> a_ar1H -> Ordering) -> [a_ar1H] -> [a_ar1H] unsafeSortList6By :: forall a_ar0Y. (a_ar0Y -> a_ar0Y -> Ordering) -> [a_ar0Y] -> [a_ar0Y] unsafeSortList5By :: forall a_ar0o. (a_ar0o -> a_ar0o -> Ordering) -> [a_ar0o] -> [a_ar0o] unsafeSortList4By :: forall a_aqZV. (a_aqZV -> a_aqZV -> Ordering) -> [a_aqZV] -> [a_aqZV] unsafeSortList3By :: forall a_aqZB. (a_aqZB -> a_aqZB -> Ordering) -> [a_aqZB] -> [a_aqZB] unsafeSortList2By :: forall a_aqZm. (a_aqZm -> a_aqZm -> Ordering) -> [a_aqZm] -> [a_aqZm] sortTup16By :: (a_arK4 -> a_arK4 -> Ordering) -> (a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4) -> (a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4, a_arK4) sortTup15By :: (a_arHG -> a_arHG -> Ordering) -> (a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG) -> (a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG, a_arHG) sortTup14By :: (a_arFr -> a_arFr -> Ordering) -> (a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr) -> (a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr, a_arFr) sortTup13By :: (a_arDp -> a_arDp -> Ordering) -> (a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp) -> (a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp, a_arDp) sortTup12By :: (a_arBy -> a_arBy -> Ordering) -> (a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy) -> (a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy, a_arBy) sortTup11By :: (a_arzU -> a_arzU -> Ordering) -> (a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU) -> (a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU, a_arzU) sortTup10By :: (a_aryp -> a_aryp -> Ordering) -> (a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp) -> (a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp, a_aryp) sortTup9By :: (a_arx7 -> a_arx7 -> Ordering) -> (a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7) -> (a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7, a_arx7) sortTup8By :: (a_arvY -> a_arvY -> Ordering) -> (a_arvY, a_arvY, a_arvY, a_arvY, a_arvY, a_arvY, a_arvY, a_arvY) -> (a_arvY, a_arvY, a_arvY, a_arvY, a_arvY, a_arvY, a_arvY, a_arvY) sortTup7By :: (a_arv8 -> a_arv8 -> Ordering) -> (a_arv8, a_arv8, a_arv8, a_arv8, a_arv8, a_arv8, a_arv8) -> (a_arv8, a_arv8, a_arv8, a_arv8, a_arv8, a_arv8, a_arv8) sortTup6By :: (a_arup -> a_arup -> Ordering) -> (a_arup, a_arup, a_arup, a_arup, a_arup, a_arup) -> (a_arup, a_arup, a_arup, a_arup, a_arup, a_arup) sortTup5By :: (a_artP -> a_artP -> Ordering) -> (a_artP, a_artP, a_artP, a_artP, a_artP) -> (a_artP, a_artP, a_artP, a_artP, a_artP) sortTup4By :: (a_artm -> a_artm -> Ordering) -> (a_artm, a_artm, a_artm, a_artm) -> (a_artm, a_artm, a_artm, a_artm) sortTup3By :: (a_art2 -> a_art2 -> Ordering) -> (a_art2, a_art2, a_art2) -> (a_art2, a_art2, a_art2) sortTup2By :: (a_arsN -> a_arsN -> Ordering) -> (a_arsN, a_arsN) -> (a_arsN, a_arsN)