calcRPN :: String -> [Double] calcRPN = foldl interprete [] . words interprete s x | x `elem` ["+","-","*","/","^"] = operate x s | otherwise = read x:s where operate op (x:y:s) = case op of "+" -> x + y:s "-" -> y - x:s "*" -> x * y:s "/" -> y / x:s "^" -> y ** x:s