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)) --------------------------------------------------------------------------------