     return associatedProperty!
 }
 
+/**
+ * Create associated mutable property with given host.
+ * Subsequent calls with the same host and key return the same associated objects.
+ *
+ * - parameter host: Host of the newly created property
+ * - parameter key: Key with which the newly created property will be associated with
+ * - parameter setter: Setter that will propagate new values to the newly created property
+ * - parameter getter: Getter that will read initial value
+ * - returns: Newly created MutableProperty
+ */
 public func lazyMutableProperty<T>(_ host: AnyObject, _ key: UnsafePointer<Void>, _ setter: @escaping (T) -> (), _ getter: () -> T) -> MutableProperty<T> {
     return lazyAssociatedProperty(host, key) {
         let property = MutableProperty<T>(getter())

}

extension SignalProducerProtocol where Value == Void, Error == NoError {
    public static func sideEffect(actions: @escaping () -> ()) -> SignalProducer<(), NoError> {
        return SignalProducer<(), NoError> { sink, _ in
            actions()

}

extension Reactive where Base: Disposing {
    /**
     * Lifetime of object
     */
    public var lifetime: Lifetime {
        return base.lifecycleObject.reactive.lifetime
    }
