Comments (2)
I'm using Codensity
to ensure timely resource cleanup (like a transformer version of the managed
library), in which case this is not going to be the instance you want, since it will run your finalizers early, as you exit the mdo
block.
Another option is to use a lazily-evaluated promise for the result, mirroring the approach in fixIO
:
fixCodensity :: MonadIO m => (a -> Codensity m a) -> Codensity m a
fixCodensity f = Codensity \k -> do
promise <- liftIO $ IORef.newIORef (error "result eval'd too early")
ans <- liftIO $ unsafeDupableInterleaveIO (IORef.readIORef promise)
runCodensity (f ans) \a -> do
liftIO $ IORef.writeIORef promise a
k a
This is also probably not the instance you'd want in a general-purpose library, but I figured I'd put it here for reference.
from kan-extensions.
There's also an implementation here: https://stackoverflow.com/questions/25827227/why-cant-there-be-an-instance-of-monadfix-for-the-continuation-monad
instance MonadFix m => MonadFix (Codensity m) where
mfix f = Codensity (\ka -> mfixing (\a -> runCodensity (f a) ka<&>(,a)))
where mfixing f = fst <$> mfix (\ ~(_,a) -> f a )
from kan-extensions.
Related Issues (20)
- Instances for right/left Kan extensions for functors along themselves HOT 1
- [Ask] How to hoist monad on CoT
- Add Eq1 etc instances?
- Pattern synonyms for different encodings of Day convolution
- Instances for Codensity (Semigroup, Monoid, numeric classes) HOT 1
- Consider different functor arguments of Ran, Lan HOT 1
- Add: Ran f (Codensity g) ~> Ran (Compose f g) g
- Some random functions/types related to Lan
- MonadFree instance for Co
- Levity polymorphic codensity HOT 1
- Instances for contravariant Coyoneda/Day
- Making Codensity a separate library?
- Direct-style CoT
- kan-extensions-5.1 doesn't build with GHC-9.0 HOT 1
- Export Curried Yoneda utils
- send :: (forall x. (a -> Free f x) -> f (Free f x)) -> Codensity (Free f) a HOT 1
- Require building with GHC 8.4 or later
- Add oneShot to Codensity instances HOT 1
- Representable (Lan f g) 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 kan-extensions.