upper bound on this should be View:  `ViewPresenter<V extends View>`.