     /// Channel that contains actions sent by the control
     typealias ActionChannel = Channel<ActionChannelUpdate, Void>
 
-    /// Makes or returns cached channel. The chennel that will have update on each triggering of action
+    /// Makes or returns cached channel. The channel that will have update on each triggering of action
     func actionChannel() -> ActionChannel {
       let actionReceiver = (self.target as? ActionReceiver) ?? {
         let actionReceiver = ActionReceiver(control: self)

    }
  }

  private class KeyPathObserver<T>: NSObject {
    let keyPath: String
    weak var producer: Producer<T?, Void>?

    init(keyPath: String, producer: Producer<T?, Void>) {
      self.keyPath = keyPath
      self.producer = producer
    }

    override func observeValue(forKeyPath keyPath: String?,

                               change: [NSKeyValueChangeKey: Any]?,
                               context: UnsafeMutableRawPointer?) {
      assert(keyPath == self.keyPath)
      if let change = change {
        observationBlock(change)
      }
    }
  }
#endif
