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


//MARK: Associated properties

// lazily creates a gettable associated property via the given factory
public func lazyAssociatedProperty<T: AnyObject>(_ host: AnyObject, _ key: UnsafePointer<Void>, factory: () -> T) -> T {
    var associatedProperty = objc_getAssociatedObject(host, key) as? T


    static var lifecycleObject: UInt8 = 1
}

/**
 * Protocol that allows various objects to take advantage of reactive.lifetime signal
 */
public protocol Disposing: class { }

extension Disposing {
    fileprivate var lifecycleObject: NSObject {
