     
     /// Whether the ViewModel has next page.
     var hasNextPage: AnyProperty<Bool> { get }
+    
+    var refreshCocoaAction: CocoaAction { get }
+    
+    var fetchCocoaAction: CocoaAction { get }
+
+    var fetchIfNeededCocoaAction: CocoaAction { get }
 }
 
 /// ArrayViewModel which its array is lazily fetched, or even paginated.

        return nextPage != nil
    }
    
    /// Applies `fetchAction` only if next page is availabe or returns `SignalProducer.empty`
    @warn_unused_result(message="Did you forget to call `start` on the producer?")
    public func fetchIfNeeded(input: FetchInput) -> SignalProducer<[Element], ActionError<FetchError>>
    {
        if willFetchNextPage && hasNextPage.value

        
        return SignalProducer.empty
    }
    
    public var fetchCocoaAction: CocoaAction { return fetchAction.unsafeCocoaAction }
    
    public var refreshCocoaAction: CocoaAction { return refreshAction.unsafeCocoaAction }
    
    public var fetchIfNeededCocoaAction: CocoaAction { return fetchIfNeededAction.unsafeCocoaAction }
}

/// An implementation of FetchedArrayViewModelType that fetches ViewModels by calling `fetchClosure.`
