     typealias SingleOperation = (Double) -> Double
     typealias DoubleOperation = (Double, Double) -> Double
     
-    private enum Op: Printable {
+    private enum Op: CustomStringConvertible {
         case Operand(Double)
         case UnaryOperation(String, SingleOperation)
         case BinaryOperation(String, DoubleOperation)

            get {
                switch self {
                    case .Operand(let number) : return "\(number)"
                    case .UnaryOperation(let mathSymbol, let op): return mathSymbol
                    case .BinaryOperation(let mathSymbol, let op): return mathSymbol
                }
            }
        }

        if !ops.isEmpty {
            var remainingOps = ops
            let op = remainingOps.removeLast()
            let currentHistory = currentHistoryDisplay ?? ""
            switch op {
                case .Operand(let number) : return remainingOps.isEmpty ? history(remainingOps, currentHistoryDisplay: currentHistory + "\(number)") : history(remainingOps, currentHistoryDisplay: currentHistory + "\(number) -- ")
                case .UnaryOperation:
                    let evaluation = evaluate(remainingOps)
                    if let number = evaluation.result {
                        remainingOps.removeLast()
                        return remainingOps.isEmpty ? history(remainingOps, currentHistoryDisplay : "\(currentHistory) \(op)(\(number))") : history(remainingOps, currentHistoryDisplay : "\(currentHistory) \(op)(\(number)) -- ")
                    }
                case .BinaryOperation :
                    let firstEvaluation = evaluate(remainingOps)
                    if let number = firstEvaluation.result {
                        let secondEvaluation = evaluate(firstEvaluation.remaining)
