 
     public func bind<Target: AnyObject>(
         on queue: DispatchQueue = .main,
-        to destination: (target: Target, keyPath: ReferenceWritableKeyPath<Target, Value?>)
+        to destination: (target: Target, keyPath: ReferenceWritableKeyPath<Target, Value>)
     )
     -> Observation {
 

        }

    }

    public func bind<Target: AnyObject, U>(
        on queue: DispatchQueue = .main,
        transform: @escaping (Value) -> U?,

        )

    }
    
    public func bind<Target: AnyObject, U>(
        on queue: DispatchQueue = .main,
        transform: @escaping (Value) -> U,
        to destination: (target: Target?, keyPath: ReferenceWritableKeyPath<Target?, U>)
    )
    -> Observation {
        
        destination.target?[keyPath: destination.keyPath] = transform(value)
        
        return observe(on: queue) { change in
            
            let newValue = transform(change.currentValue)
            
            destination.target?[keyPath: destination.keyPath] = newValue
            
        }
            
    }
    
    public func bind<Target: AnyObject, U>(
        on queue: DispatchQueue = .main,
        transform: @escaping (Value) -> U?,
        to destination: (target: Target?, keyPath: ReferenceWritableKeyPath<Target?, U?>)
    )
    -> Observation {
        
        destination.target?[keyPath: destination.keyPath] = transform(value)
        
        return observe(on: queue) { change in
            
            let newValue = transform(change.currentValue)
            
            destination.target?[keyPath: destination.keyPath] = newValue
            
        }
            
    }

    public func bind<Target: AnyObject>(
        on queue: DispatchQueue = .main,
        to destination: (target: Target?, keyPath: ReferenceWritableKeyPath<Target?, Value>)
    )
    -> Observation {

