Comments (5)
I think an eff-doobie
module sounds like a good idea. I have a few gripes with your implementation:
a) It's fixed to Task, instead of an arbitrary catchable, suspendable monad as in doobie-fs2 proper (which I'm calling Out[_]
)
b) There is no reason to have an output of Eff[fx1[Out], A]
, because all you need is an Out[A]
. Logically as well this makes sense, because collapsing all of the binds is required for correct error handling behavior.
c) Is there no built-in way in doobie to do all of this error handling and recovery logic?
Feel free to open a PR though.
from eff.
Thanks, in that case I think I'm going to give it a shot (after addressing #98).
a) It's fixed to Task, instead of an arbitrary catchable, suspendable monad as in doobie-fs2 proper (which I'm calling Out[_])
Yes, I'll make sure to use the same monad restrictions as in doobie-fs2.
b) There is no reason to have an output of Eff[fx1[Out], A], because all you need is an Out[A]. Logically as well this makes sense, because collapsing all of the binds is required for correct error handling behavior.
Ah I see, you mean it's better to output directly (in this case) a Task[A]
(using .detach
)?
c) Is there no built-in way in doobie to do all of this error handling and recovery logic?
Yes, the Transactor
has a Strategy
which contains all the configurable bits (before
, after
, oops
, and always
). You can then use Strategy.wrap
to apply this logic to ConnectionIO
program or Strategy.wrapK
to apply this logic to a Kleisli[F, Connection, ?
program. But I'm not quite sure how to obtain a raw ConnectionIO
or Kleisli[F, Connection, ?
program form a generic stack in Eff
, but we can discuss it in more detail when I prepare an initial PR.
from eff.
Sure. Just so you know, you cannot do the last thing you mentioned. The effects may not commute over ConnectionIO
, you need ConnectionIO
to be the only thing in the stack. As well I would need to see tests that the interpreter preserves ConnectionIO
's transactions without splitting them into smaller transactions.
from eff.
Started working on this, but won't be able to release it before the release of doobie 0.4.2 (0.4.1 does not contain the new Transactor
design that is needed).
from eff.
This is merged into master now.
from eff.
Related Issues (20)
- sbt launch script in repo is outdated
- upgrade to cats-effect 1.0.0-RC3? HOT 5
- Any plans on releasing latest version of Eff ? HOT 4
- How to use fs2.Stream compile for Eff[R, ?] ? HOT 3
- 2.13 support ? HOT 12
- Future maintenance of Eff AddOns (Twitter, Scalaz, Monix, Doobie) HOT 7
- Use scala-steward? HOT 2
- missing 5.7.0 tag on GitHub HOT 1
- Broaden maintainer set HOT 1
- Scalajs 1.x support HOT 1
- Use Mergify for automatically merge scala-steward's PRs? HOT 2
- release new version HOT 5
- migrate to GitHub Actions?
- Cats Effect 3 migration HOT 2
- "Composing ADTs" tutorial code does not work as expected HOT 2
- Widening the effects a computation HOT 9
- ConcurrentWeakIdentityHashMap issue
- update specs2 HOT 1
- old removed branch memo
- remove `-source:3.0-migration` HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from eff.