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", "=","="]