From a7f121250cf9409409ff90f9cedf284bf3cab317 Mon Sep 17 00:00:00 2001 From: Sam Truzjan Date: Sun, 29 Sep 2013 06:18:18 +0400 Subject: Eliminate list conversion in parsing --- src/Data/BEncode.hs | 10 +++++----- src/Data/BEncode/BDict.hs | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/Data/BEncode.hs b/src/Data/BEncode.hs index 8858730..086d34f 100644 --- a/src/Data/BEncode.hs +++ b/src/Data/BEncode.hs @@ -788,13 +788,13 @@ parser = valueP di | di <= '9' -> BString <$> stringP 'i' -> P.anyChar *> ((BInteger <$> integerP) <* P.anyChar) 'l' -> P.anyChar *> ((BList <$> listBody) <* P.anyChar) - 'd' -> do - P.anyChar - (BDict . BD.fromAscList <$> - many ((,) <$> stringP <*> valueP)) - <* P.anyChar + 'd' -> P.anyChar *> (BDict <$> dictBodyP)<* P.anyChar t -> fail ("bencode unknown tag: " ++ [t]) + dictBodyP :: Parser BDict + dictBodyP = Cons <$> stringP <*> valueP <*> dictBodyP + <|> pure Nil + listBody = do c <- P.peekChar case c of diff --git a/src/Data/BEncode/BDict.hs b/src/Data/BEncode/BDict.hs index c674b21..2b58644 100644 --- a/src/Data/BEncode/BDict.hs +++ b/src/Data/BEncode/BDict.hs @@ -1,6 +1,6 @@ module Data.BEncode.BDict ( BKey - , BDictMap + , BDictMap (..) -- * Construction , Data.BEncode.BDict.empty -- cgit v1.2.3