Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Still maintained? #1

Closed
jchapuis opened this issue Nov 21, 2020 · 5 comments
Closed

Still maintained? #1

jchapuis opened this issue Nov 21, 2020 · 5 comments

Comments

@jchapuis
Copy link

Hi there, this is cool stuff, are you still using it and maintaining it? Or is there some alternative bifunctorial cats stack somewhere else?

Cheers

@tmccarthy
Copy link
Owner

tmccarthy commented Nov 21, 2020

Thanks! I'm not really using it myself any more, but I intend to update it occasionally. I'll try to release a version in the next few days that updates key dependencies.

Certainly when I wrote this library there wasn't anything comparable available elsewhere. There had been some discussions about introducing bifunctor classes in Cats 3.0. But both the Cats and Zio communities seem to have moved away from the idea (for different reasons).

If there's anything you'd like to see changed or improved, PRs are welcome!

@tmccarthy
Copy link
Owner

I've released a new version 0.2.0 which upgrades all dependencies to their latest versions.

@jchapuis
Copy link
Author

Great thanks a lot, I'll give it a shot!

I've got this cats tagless codebase expressed with EitherT, and I wanted to experiment with a bifunctorial approach, see where it would take me. This codebase isn't using with a full IO because it's running on akka HTTP and slick.
So naturally I needed BifunctorMonad to start with which is how I landed on your project.

Anyway, I find the pick & choose approach in tagless relevant, do you actually know why ZIO and cats/monix BIO are not designed with an effects hierarchy? They seem to be "all-in"-only options as far as I can see? What are you mostly using nowadays if I may ask?

@tmccarthy
Copy link
Owner

tmccarthy commented Nov 23, 2020

I've got this cats tagless codebase expressed with EitherT, and I wanted to experiment with a bifunctorial approach, see where it would take me. This codebase isn't using with a full IO because it's running on akka HTTP and slick.
So naturally I needed BifunctorMonad to start with which is how I landed on your project.

Hmm I actually don't think I've defined instances for EitherT in this project. Shouldn't be too hard, I might give it a try and release a new version.

Anyway, I find the pick & choose approach in tagless relevant, do you actually know why ZIO and cats/monix BIO are not designed with an effects hierarchy? They seem to be "all-in"-only options as far as I can see?

I think the first really solid go at bifunctor IO in Scala was ZIO. That project has pursued a different approach to effect definition with the third "resource" parameter in ZIO[R, E, A]. I don't know if their attempt to re-define a type class hierarchy at zio-prelude will include bifunctor effects, but I don't think that really aligns with ZIO's philosophy on effect management.

The conversations around bifunctor type classes in cats-effect 3.0 didn't end up going anywhere. The "Bifunctor classes" section in the final proposal for cats-effect 3.0 describes a lot of the difficulties such a project encounters. Mostly I think it the attitude was that bifunctor classes would essentially duplicate the existing class structure, and there wasn't enough evidence that they were a sufficiently useful abstraction to justify the extra effort. I think the subsequent divisions between the ZIO and cats approaches have probably vindicated that decision.

I actually did not know that monix-bio existed! Again, maybe I should consider adding instances for it as part of this project.

What are you mostly using nowadays if I may ask?

These days I mostly just use plain old IO. When I find value in a tagless approach I tend to just use the normal monofunctor classes from cats-effect.

@jchapuis
Copy link
Author

great! as surprising as it sounds maybe I would probably make use of an EitherT[DBIO, *, *] instance 😉
We are using the https://github.com/kubukoz/slick-effect microlib which provides a DBIOAsync instance - which we then interpret to Future since we run with akka-http.

Regarding coverage in the project, I haven't checked but do you e.g. have some discipline tests?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants