packages feed

scenegraph-0.1: src/Calc.hs

module Calc where


data Calculator = Calculator { replace :: Bool,
                               operand :: Maybe String,
                               operator :: Maybe String,
                               register :: String } deriving Show
                               
newCalculator = Calculator True Nothing Nothing "0"


applyCalc :: Calculator -> String -> Calculator
applyCalc calc "+" = calc { replace=True,
                        operand = Just (register calc),
                        operator = Just "+" }
applyCalc calc "=" = doCalc calc
applyCalc calc "c" = newCalculator
applyCalc calc "ce" = calc { replace=True, register="0" }
applyCalc calc str = if replace calc then
                     calc { replace=False,register=str }
                 else
                     calc { register = (register calc) ++ str}
                     
doCalc calc = let x = read $ maybe "0" id (operand calc ) 
                  y = read $ register calc
              in case (operator calc) of
                    Just "+" -> calc { replace=True,register = show $ x + y,operand= Just $ show y }
                    _ -> calc
                        
                        
calcString = foldl applyCalc newCalculator 

t1 = calcString [ "1", "+", "1", "=", "=", "="]

t2 = calcString [ "2", "+", "5", "=","="]