@@ -105,6 +105,7 @@ module Data.Attoparsec.ByteString.Char8
105105 ) where
106106
107107import Control.Applicative (pure, (*>), (<*), (<$>), (<|>))
108+import Control.Monad (void, when)
108109import Data.Attoparsec.ByteString.FastSet (charClass, memberChar)
109110import Data.Attoparsec.ByteString.Internal (Parser)
110111import Data.Attoparsec.Combinator
@@ -527,8 +528,10 @@ scientifically :: (Scientific -> a) -> Parser a
527528scientifically h = do
528529 let minus = 45
529530 plus = 43
530− !positive <- ((== plus) <$> I.satisfy (\c -> c == minus || c == plus)) <|>
531− pure True
531+ sign <- I.peekWord8'
532+ let !positive = sign == plus || sign /= minus
533+ when (sign == plus || sign == minus) $
534+ void $ I.anyWord8
532535
533536 n <- decimal
534537