                 return decodeNumberExponent(start, sign: sign, value: value)
 
             default:
-                return .Ok(.Number(sign * value))
-            }
-        }
-        return .Ok(.Number(sign * value))
-    }
-
-    mutating func decodeNumberExponent(start: Int, sign: Double, value: Double) -> Result {
+                return .Ok(.Number(sign.rawValue * value))
+            }
+        }
+        return .Ok(.Number(sign.rawValue * value))
+    }
+
+    mutating func decodeNumberExponent(start: Int, sign: Sign, value: Double) -> Result {
         if ++loc >= input.count {
             return makeParseError("unexpected end of data while parsing number at position \(start)")
         }

                return decodeNumberNegative(loc)

            case Literal.zero:
                return decodeNumberLeadingZero(loc, sign: 1.0)

            case Literal.one
            ,    Literal.two

        ,    Literal.seven
        ,    Literal.eight
        ,    Literal.nine:
            return decodeNumberPreDecimalDigits(start, sign: .Negative)

        default:
            return makeParseError("unexpected end of data while parsing number at position \(start)")
        }
    }

    mutating func decodeNumberLeadingZero(start: Int, sign: Sign) -> Result {
        if ++loc >= input.count {
            return .Ok(.Number(0))
        }
