Move parsing response entirely to Parser

This commit is contained in:
Joshua Clayton 2016-05-01 05:40:30 -04:00
parent d0fcb42535
commit 8f5446a414
3 changed files with 13 additions and 13 deletions

View File

@ -9,7 +9,7 @@ main :: IO ()
main = do
terms <- pure . lines =<< getContents
results <- pure . concat =<< mapM search terms
let response = responseFromParse $ parseLines $ unlines results
let response = parseLines $ unlines results
case withOneOccurrence $ withOneFile response of
Right termMatchSet ->

View File

@ -3,14 +3,20 @@ module Unused.Parser
) where
import Control.Monad (void)
import Data.Map.Strict (fromList)
import Text.Parsec.String (Parser)
import Data.Bifunctor (second)
import Text.Parsec
import Unused.Types
import Text.Parsec.String (Parser)
import qualified Data.Map.Strict as Map
import Unused.Util (groupBy)
import Unused.Types (TermMatch(..), ParseResponse, resultsFromMatches)
parseLines :: String -> Either ParseError [TermMatch]
parseLines :: String -> ParseResponse
parseLines =
parse parseTermMatches "matches"
responseFromParse . parse parseTermMatches "matches"
responseFromParse :: Either ParseError [TermMatch] -> ParseResponse
responseFromParse =
fmap $ Map.fromList . map (second resultsFromMatches) . groupBy term
parseTermMatches :: Parser [TermMatch]
parseTermMatches = do

View File

@ -2,17 +2,15 @@ module Unused.Types
( TermMatch(..)
, TermMatchSet
, ParseResponse(..)
, responseFromParse
, listFromMatchSet
, withOneFile
, withOneOccurrence
, resultsFromMatches
) where
import Text.Parsec (ParseError)
import Data.Bifunctor (second)
import qualified Data.Map.Strict as Map
import Data.List (isInfixOf)
import Unused.Util (groupBy)
data TermMatch = TermMatch
{ term :: String
@ -41,10 +39,6 @@ resultsFromMatches m =
totalFiles' = length m
totalOccurrences' = sum $ fmap occurrences m
responseFromParse :: Either ParseError [TermMatch] -> ParseResponse
responseFromParse =
fmap $ Map.fromList . map (second resultsFromMatches) . groupBy term
withOneFile :: ParseResponse -> ParseResponse
withOneFile = fmap $ Map.filterWithKey (\_ a -> totalFiles a == 1)