unused-0.6.0.0: src/Unused/Grouping.hs
module Unused.Grouping
( Grouping(..)
, CurrentGrouping(..)
, GroupedTerms
, groupedResponses
) where
import qualified Data.List as L
import qualified Data.Map.Strict as Map
import Unused.Grouping.Internal (groupFilter)
import Unused.Grouping.Types (Grouping(..), CurrentGrouping(..), GroupFilter, GroupedTerms)
import Unused.ResponseFilter (updateMatches)
import Unused.Types (TermMatchSet, TermResults(trMatches))
groupedResponses :: CurrentGrouping -> TermMatchSet -> [GroupedTerms]
groupedResponses g tms =
(\g' -> (g', groupedMatchSetSubsets currentGroup g' tms)) <$> groupingsFromSet
where
groupingsFromSet = allGroupings currentGroup tms
currentGroup = groupFilter g
groupedMatchSetSubsets :: GroupFilter -> Grouping -> TermMatchSet -> TermMatchSet
groupedMatchSetSubsets f tms =
updateMatches $ filter ((== tms) . f)
allGroupings :: GroupFilter -> TermMatchSet -> [Grouping]
allGroupings f =
uniqueValues . Map.map (fmap f . trMatches)
where
uniqueValues = L.sort . L.nub . concat . Map.elems