     
     /// 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 SignalProducer.empty
    }
}

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

    public let fetchClosure: PaginationType? -> SignalProducer<([Element], PaginationType?), FetchError>
    private(set) public lazy var refreshAction: Action<(), [Element], FetchError> = self.initRefreshAction()
    private(set) public lazy var fetchAction: Action<(), [Element], FetchError> = self.initFetchAction()
    
    private(set) public lazy var fetchIfNeededAction: Action<(), [Element], ActionError<FetchError>> = { _ in
        
        let action = Action<(), [Element], ActionError<FetchError>>(enabledIf: self.enabled) { [unowned self] _ in
            return self.fetchIfNeeded()
        }
        
        action.unsafeCocoaAction = CocoaAction(action, input: ())
        
        return action
    }()
    
    /// Initializes an instance with `fetchClosure`
    ///
