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