     associatedtype ValueType: ExpressionValueType
 }
 
+
 // MARK: String
 
 extension String: ExpressionValueType {

    
    public typealias ValueType = String
}

// MARK: Date


    public typealias ValueType = NSDate
}


// MARK: Numbers

extension Int: ExpressionValueType {
    
    public var boxedValue: AnyObject {
        
        return self as NSNumber
    }
}

extension Float: ExpressionValueType {
    
    public var boxedValue: AnyObject {
        
        return self as NSNumber
    }
}

extension Double: ExpressionValueType {
    
    public var boxedValue: AnyObject {
        
        return self as NSNumber
    }
}

public class Integer16Attribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = Int
}

public class Integer32Attribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = Int
}

public class Integer64Attribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = Int
}

public class FloatAttribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = Float
}

public class Double64Attribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = Double
}

public class DecimalAttribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = Float
}


// MARK: Data

extension NSData: ExpressionValueType {
    
    public var boxedValue: AnyObject {
        
        return self
    }
}

public class DataAttribute: KeyAttribute, TypedExpressionConvertible {
    
    public typealias ValueType = NSData
}


