 		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?

	@discardableResult
	public func bind(to tableView: NSTableView, animated: Bool = true, createCell: @escaping (DataSource, Int, NSTableView) -> NSView?) -> Disposable {
		if animated {
			return bind(to: tableView, using: DefaultTableViewBond<DataSource>(createCell: createCell, animations: [.effectFade, .slideUp]))
		} else {
			return bind(to: tableView, using: ReloadingTableViewBond<DataSource>(createCell: createCell))
		}
