@@ -124,6 +124,7 @@ module Data.Attoparsec.ByteString.Char8
124124 ) where
125125
126126import Control.Applicative (pure, (*>), (<*), (<$>), (<|>))
127+import Control.Monad (void, when)
127128import Data.Attoparsec.ByteString.FastSet (charClass, memberChar)
128129import Data.Attoparsec.ByteString.Internal (Parser)
129130import Data.Attoparsec.Combinator
@@ -555,8 +556,10 @@ scientifically :: (Scientific -> a) -> Parser a
555556scientifically h = do
556557 let minus = 45
557558 plus = 43
558− !positive <- ((== plus) <$> I.satisfy (\c -> c == minus || c == plus)) <|>
559− pure True
559+ sign <- I.peekWord8'
560+ let !positive = sign == plus || sign /= minus
561+ when (sign == plus || sign == minus) $
562+ void $ I.anyWord8
560563
561564 n <- decimal
562565