follow-0.1.0.0: src/Follow/Middlewares/Sort.hs
{-|
Description: Middleware to sort entries according to a function.
This middleware allows to sort the directory entries according to a
comparison function. The comparison function has a type @Entry ->
Entry -> Ordering@.
Some pre-built comparison function builders are also
exported. Example:
@
import Follow
import Follow.Middlewares.Sort
-- Suppose we have a `Directory` d
apply (byGetter eTitle) d
@
-}
module Follow.Middlewares.Sort
( apply
, byGetter
, ComparisonFunction
) where
import Data.List (sortBy)
import Follow.Types (Directory (..), Entry, EntryGetter, Middleware)
-- | Function to compare entries.
type ComparisonFunction = Entry -> Entry -> Ordering
-- | Middleware to sort a directory according to a given comparison function.
apply :: ComparisonFunction -> Middleware
apply f directory = directory {dEntries = sortBy f (dEntries directory)}
-- | Creates a comparison function that sorts by the values returned
-- by a getter
byGetter :: Ord a => EntryGetter a -> ComparisonFunction
byGetter getter e1 e2 = compare (getter e1) (getter e2)