 		tableView.reloadData()
 	}
 }
+
+// MARK: - Bond implementation
 
 public extension SignalProtocol where Element: DataSourceEventProtocol, Element.DataSource: QueryableDataSourceProtocol, Element.DataSource.Item: Any, Element.DataSource.Index == Int, Error == NoError {
 

  }
}

public protocol TableViewBond {
	
	associatedtype DataSource: DataSourceProtocol
	
	var insertAnimation: NSTableViewAnimationOptions? { get }
	var deleteAnimation: NSTableViewAnimationOptions? { get }
	
	func apply(event: DataSourceEvent<DataSource>, to tableView: NSTableView)
	func heightForRow(at index: Int, tableView: NSTableView, dataSource: DataSource) -> CGFloat?

	}
}

// MARK: - Builtin bonds

private struct DefaultTableViewBond<DataSource: DataSourceProtocol>: TableViewBond {
	
	let createCell: (DataSource, Int, NSTableView) -> NSView?
	
	var animations: NSTableViewAnimationOptions
	
	var insertAnimation: NSTableViewAnimationOptions? {
		return animations
	}
	
	var deleteAnimation: NSTableViewAnimationOptions? {
		return animations
	}
	
	func cellForRow(at index: Int, tableView: NSTableView, dataSource: DataSource) -> NSView? {
		return createCell(dataSource, index, tableView)
