calculator-0.2.0.0: src/Calculator/Parser/Base.hs
module Calculator.Parser.Base where
--------------------------------------------------------------------------------
import Control.Applicative ((<$>))
import Control.Monad (liftM2)
import Text.ParserCombinators.Parsec
--------------------------------------------------------------------------------
parseNumber :: Parser Double
parseNumber = read <$> do
neg <- optionMaybe (char '-')
dec <- many1 digit
flt <- option "" (liftM2 (:) (char '.') (many1 digit))
return $ let num = dec ++ flt
in maybe num (:num) neg
--------------------------------------------------------------------------------
parseId :: Parser String
parseId = liftM2 (:) letter (many (letter <|> digit))
--------------------------------------------------------------------------------