packages feed

calculator-0.1.3.0: src/Calculator/Prim/Base.hs

module Calculator.Prim.Base where

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

import           Text.ParserCombinators.Parsec

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

import           Control.Applicative           ((<$>))
import           Control.Monad                 (liftM2)

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

type Number = Double

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

parseNumber :: Parser Number
parseNumber = read <$> do
  dec <- many1 digit
  flt <- option "" (liftM2 (:) (char '.') (many1 digit))
  if null flt
    then return dec
    else return $ dec ++ flt

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

parseId :: Parser String
parseId = (liftM2 (:) letter (many (letter <|> digit)))

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