diff --git a/Distribution/ParseUtils.hs b/Distribution/ParseUtils.hs index f62e7f749df11cb2d75e341e0d33ce3df8bc7177..e53097d39d351d723554b289950fa17abb256378 100644 --- a/Distribution/ParseUtils.hs +++ b/Distribution/ParseUtils.hs @@ -166,23 +166,23 @@ type Stanza = [(LineNo,String,String)] -- |Split a string into blank line-separated stanzas of -- "Field: value" groups splitStanzas :: String -> ParseResult [Stanza] -splitStanzas = mapM mkStanza . map merge . groupStanzas . filter validLine . zip [1..] . lines +splitStanzas = mapM mkStanza . map merge . groupStanzas . filter validLine . zip [1..] . map trimTrailingSpaces . lines where validLine (_,s) = case dropWhile isSpace s of '-':'-':_ -> False -- Comment _ -> True groupStanzas :: [(Int,String)] -> [[(Int,String)]] groupStanzas [] = [] - groupStanzas xs = let (ys,zs) = break allSpaces xs - in ys : groupStanzas (dropWhile allSpaces zs) + groupStanzas xs = let (ys,zs) = break (null . snd) xs + in ys : groupStanzas (dropWhile (null . snd) zs) -allSpaces :: (a, String) -> Bool -allSpaces (_,xs) = all isSpace xs +trimTrailingSpaces :: String -> String +trimTrailingSpaces = reverse . dropWhile isSpace . reverse -- |Split a file into "Field: value" groups, but blank lines have no -- significance, unlike 'splitStanzas'. A field value may span over blank -- lines. singleStanza :: String -> ParseResult Stanza -singleStanza = mkStanza . merge . filter validLine . zip [1..] . lines +singleStanza = mkStanza . merge . filter validLine . zip [1..] . map trimTrailingSpaces . lines where validLine (_,s) = case dropWhile isSpace s of '-':'-':_ -> False -- Comment [] -> False -- blank line