unused-0.5.0.2: src/Unused/Grouping.hs
module Unused.Grouping
( Grouping(..)
, CurrentGrouping(..)
, GroupedTerms
, groupedResponses
) where
import qualified Data.Map.Strict as Map
import Data.List (sort, nub)
import Unused.Types
import Unused.ResponseFilter (updateMatches)
import Unused.Grouping.Types
import Unused.Grouping.Internal
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 newMatches
where
newMatches = filter ((== tms) . f)
allGroupings :: GroupFilter -> TermMatchSet -> [Grouping]
allGroupings f =
uniqueValues . Map.map (fmap f . trMatches)
where
uniqueValues = sort . nub . concat . Map.elems