You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Note that we don't expect source clients to live in the http client backend's m monad, so that we can say start from ClientM, go to some custom monad App, and finally land back in IO, using two successive calls to hoistClientMonad, or one that composes the transformations. This just seems like the right choice, because it's the most flexible option.
I'm about to be away from the internet for ten days, and am happy with this. One question though: isn't it already possible to do what hoist does simply by defining a new RunClient instance for the monad?
@jkarni Maybe, yeah, except that a typeclass instance has to be provided for each target monad, and I think you're pretty much stuck with just one transformation per monad (you'd define the instance for TargetMonad as transformations over the instance of SourceMonad) so it's static. While with hoistClient you get to pick the transformation, and it can be dynamic: partially applying some arguments from some context first and finally transforming the return type of clients.
Not sure whether you were suggesting to refactor the PR in terms of RunClient instead or not, but I'm failing to see the advantages so I'm thinking probably not and that you were just curious. =) (or I might be overlooking something?)
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
It's defined in terms of this new typeclass method of
HasClientinservant-client-core:Note that we don't expect source clients to live in the http client backend's
mmonad, so that we can say start fromClientM, go to some custom monadApp, and finally land back inIO, using two successive calls tohoistClientMonad, or one that composes the transformations. This just seems like the right choice, because it's the most flexible option.Feedback welcome!