 
 	/// Binds *value* to SQL parameter *name* for each (*name*, *value*) in `parameters`.
 	///
-	/// - parameter parameters: A sequence of name and value pairs to bind to SQL parameters
+	/// - parameter parameters: A collection of name and value pairs to bind to SQL parameters
 	///
 	/// - throws: An error if the SQL parameter *name* doesn't exist or *value* couldn't be bound
 	///
 	/// - returns: `self`
-	@discardableResult public func bind<S: Sequence>(parameters: S) throws -> Statement where S.Element == (String, V: ParameterBindable) {
+	@discardableResult public func bind<C: Collection>(parameters: C) throws -> Statement where C.Element == (String, V: ParameterBindable) {
 		for (name, value) in parameters {
 			let index = sqlite3_bind_parameter_index(stmt, name)
 			guard index > 0 else {

extension Statement {
	/// Binds the *n* parameters in `values` to the first *n* SQL parameters of `self`.
	///
	/// - parameter values: A sequence of values to bind to SQL parameters
	///
	/// - throws: An error if one of `values` couldn't be bound
	///
	/// - returns: `self`
	@discardableResult public func bind<S: Sequence>(parameterValues values: S) throws -> Statement where S.Element: ParameterBindable {
		var index: Int32 = 1
		for value in values {
			try value.bind(to: stmt, parameter: index)


	/// Binds *value* to SQL parameter *name* for each (*name*, *value*) in `parameters`.
	///
	/// - parameter parameters: A series of name and value pairs to bind to SQL parameters
	///
	/// - throws: An error if the SQL parameter *name* doesn't exist or *value* couldn't be bound
	///
