 
 public typealias DoubleValue = Double
 
-public typealias DecimalValue = Decimal
-
 public typealias NullValue = Null
 


// MARK: - Protocol

/// Type can be converted to and from JSON.
public protocol JSONConvertible {
    
    /// Decodes the reciever from JSON.
    init?(JSONValue: JSON.Value)
    
    /// Encodes the reciever into JSON.
    func toJSON() -> JSON.Value
}

// Typealiases due to compiler error

        /// JSON value a JSON object
        case Object(JSONObject)
        
        // MARK: - Extract Values
        
        public var arrayValue: JSONArray? {
            
            switch self {
                
            case let .Array(value): return value
                
            default: return nil
            }
        }
        
        public var objectValue: JSONObject? {
            
            switch self {
                
            case let .Object(value): return value
                
            default: return nil
            }
        }
        
        // MARK: RawRepresentable
        
        public var rawValue: Any {
