@@ -124,6 +124,7 @@ module Data.Attoparsec.ByteString.Char8
126import Control.Applicative (pure, (*>), (<*), (<$>), (<|>))
126import Control.Applicative (pure, (*>), (<*), (<$>), (<|>))
127+import Control.Monad (void, when)
127import Data.Attoparsec.ByteString.FastSet (charClass, memberChar)
128import Data.Attoparsec.ByteString.FastSet (charClass, memberChar)
128import Data.Attoparsec.ByteString.Internal (Parser)
129import Data.Attoparsec.ByteString.Internal (Parser)
129import Data.Attoparsec.Combinator
130import Data.Attoparsec.Combinator
@@ -555,8 +556,10 @@ scientifically :: (Scientific -> a) -> Parser a
555scientifically h = do
556scientifically h = do
556 let minus = 45
557 let minus = 45
557 plus = 43
558 plus = 43
559+ sign <- I.peekWord8'
558− !positive <- ((== plus) <$> I.satisfy (\c -> c == minus || c == plus)) <|>
560+ let !positive = sign == plus || sign /= minus
559− pure True
561+ when (sign == plus || sign == minus) $
561 n <- decimal
564 n <- decimal