mouse
mouse copied to clipboard
Proposal: `unique` and `option`-alike combinators
Inspired by Doobie's unique
and option
queries:
https://github.com/typelevel/doobie/blob/1ad3ad5e195d89becbd4097677f738a0b10aa5df/modules/core/src/main/scala/doobie/util/query.scala#L127-L139
In fact, those two are pretty common use cases: after receiving a collection of items from somewhere, we may want to make sure that there's either exactly 1 or at most 1 items received.
To make them generally available, we could consider adding two combinators to FNested2SyntaxOps
:
final class FNested2SyntaxOps[F[_], G[_], A](private val fga: F[G[A]]) extends AnyVal {
...
def uniqueOrRaise[E](e: E)(implicit F: MonadError[F, E], G: Foldable[G]): F[A] = ???
def optionOrRaise[E](e: E)(implicit F: MonadError[F, E], G: Foldable[G]): F[Option[A]] = ???
}
The proposed names may not be perfect – just got borrowed them from Doobie. However, I'm absolutely open for bikeshedding.
If such combinators make sense, I'll be glad to file a PR.