Update `Alternator` and perhaps others to include implicits for scala 3 type updates
Is your feature request related to a problem? Please describe.
I am trying to create an Endpoint with multiple output error possibilities, and was hoping the combined error type would end up being a union type, but it looks like the implicit Alternator being used results in Either being used instead. Alternator is sealed, so adding my own, while a simple implementation, is not possible.
Describe the solution you'd like
I would like an Alternator instance that combines types using union types instead of nesting Eithers.
Describe alternatives you've considered
None, just living with nested Eithers
Additional context should be as simple as:
given unionAlternator[A, B]: Alternator.WithOut[A, B, A | B] =
new Alternator[A, B]:
type Out = A | B
def left(l: A): Out = l
def right(r: B): Out = r
def unleft(out: Out): Option[A] = out match
case a: A => Some(a)
case _ => scala.None
def unright(out: Out): Option[B] = out match
case b: B => Some(b)
case _ => scala.None
I'm wondering if there are other places where converting to union types over either's, or other scala 3 type updates in general, could be useful
Another place that comes to mind is using tuples and *: could simplify Combiner quite a bit. I'm guessing none of this is a new thought, so curious if there are plans for these sorts of updates?
I was already planning for some Scala 3 extensions. I don't think I would change Alternator. Instead I would add Scala 3 specific operators. This is because you sometimes explicitly want either even in Scala 3. If the left hand and the right hand side have the same type for example. But I agree, that besides that a union based API would be nice.
Also, having for the same ops different return types in different Scala versions feels not so clean to me. We already added something similar to zio schema.
Is there work started for this at all? I wouldn't mind taking a stab at pushing that over the finish line, feels like a good first ZIO contribution!
/bounty $450 for Scala 3-specific composition variants for any of the Endpoint methods that currently use Alternator or Combiner, together with accompanying Scala-3-specific test cases.
💎 $450 bounty • ZIO
Steps to solve:
- Start working: Comment
/attempt #3125with your implementation plan - Submit work: Create a pull request including
/claim #3125in the PR body to claim the bounty - Receive payment: 100% of the bounty is received 2-5 days post-reward. Make sure you are eligible for payouts
Thank you for contributing to zio/zio-http!
Add a bounty • Share on socials
| Attempt | Started (GMT+0) | Solution |
|---|---|---|
| 🟢 @987Nabil | Sep 19, 2024, 1:34:40 AM | #3156 |
/attempt #3125
| Algora profile | Completed bounties | Tech | Active attempts | Options |
|---|---|---|---|---|
| @987Nabil | 92 ZIO bounties + 4 bounties from 2 projects |
Scala |
Cancel attempt |
💡 @987Nabil submitted a pull request that claims the bounty. You can visit your bounty board to reward.
Is this issue open, I would like to have a go at it if it's open.
Thank you