module Text.Parsec.Numbers where
import Numeric (readSigned, readFloat)
import Text.Parsec hiding ((<|>))
import Text.Parsec.String
import Control.Applicative
parseFloat :: GenParser Char st Double
parseFloat = do
s <- getInput
case readSigned readFloat s of
[(n,s')] -> n <$ setInput s'
_ -> empty
parseExtFloat :: GenParser Char st Double
parseExtFloat = (char '+' <|> pure ' ') *> parseFloat
parseIntegral :: (Integral a, Read a) => GenParser Char st a
parseIntegral = read <$> ((:) <$> parseSignum <*> many1 digit)
parseSignum :: GenParser Char st Char
parseSignum = (' ' <$ char '+') <|> char '-' <|> pure ' '