packages feed

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

--------------------------------------------------------------------------------