sort (empty) → 0.0.0.1
raw patch · 3 files changed
+98/−0 lines, 3 filesdep +base
Dependencies added: base
Files
- LICENSE +30/−0
- sort.cabal +39/−0
- src/Data/Sort.hs +29/−0
+ LICENSE view
@@ -0,0 +1,30 @@+Copyright (c) 2016-2017, Chris Dornan++All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++ * Redistributions of source code must retain the above copyright+ notice, this list of conditions and the following disclaimer.++ * Redistributions in binary form must reproduce the above+ copyright notice, this list of conditions and the following+ disclaimer in the documentation and/or other materials provided+ with the distribution.++ * Neither the name of Iris Connect nor the names of other+ contributors may be used to endorse or promote products derived+ from this software without specific prior written permission.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ sort.cabal view
@@ -0,0 +1,39 @@+Name: sort+Version: 0.0.0.1+Synopsis: A Haskell sorting toolkit+Description: A library of general-purpose sorting utilities.+Homepage: https://github.com/cdornan/sort+Author: Chris Dornan+License: BSD3+license-file: LICENSE+Maintainer: Chris Dornan <chris@chrisdornan.com>+Copyright: Chris Dornan 2017+Category: Text+Build-type: Simple+Stability: Experimental+bug-reports: https://github.com/cdornan/sort/issues++Cabal-Version: >= 1.10++Source-Repository head+ type: git+ location: https://github.com/cdornan/sort.git++Source-Repository this+ Type: git+ Location: https://github.com/cdornan/sort.git+ Tag: 0.0.0.1++Library+ Hs-Source-Dirs: src++ Exposed-Modules: Data.Sort++ Default-Language: Haskell2010++ GHC-Options:+ -Wall+ -fwarn-tabs++ Build-depends:+ base >= 4 && < 5
+ src/Data/Sort.hs view
@@ -0,0 +1,29 @@+module Data.Sort+ ( groupSort+ , groupSortWith+ ) where++import Data.List+++-- | sort a list of elements with a stable sort, grouping together the+-- equal elements with the argument grouping function+groupSort :: Ord a => (a->[a]->b) -> [a] -> [b]+groupSort = groupSortWith compare+++-- | sort a list of elements with a stable sort, using the argument+-- @compare@ function determine the ordering, grouping together the+-- equal elements with the grouping function+groupSortWith :: (a->a->Ordering) -> (a->[a]->b) -> [a] -> [b]+groupSortWith cmp grp = aggregate . sortBy cmp+ where+ aggregate [] = []+ aggregate (h:t) = grp h eqs : aggregate rst+ where+ (eqs,rst) = span is_le t++ is_le x = case cmp x h of+ LT -> True+ EQ -> True+ GT -> False