Make Ghengin use an unrestricted monad
- Dominant language
- Haskell
- Stars
- 85
- Forks
- 2
- PR merge metrics
- No merged PRs in 30d
Description
While I think it is a good decision for the `core` of the engine and the `renderer` implementations to use the linear IO monad to track resources, I don't think it was a good decision to have that in `ghengin`, the package bringing it all together with batteries included, for the user.
Instead, the `Ghengin` monad should wrap the renderer/core monad with `UrT` (thereby making it an unrestricted monad).
We'd ensure
* The Core implementation and management of linear resources is correct by use of linear types, and brings sanity to the developers and engine developers relying directly on core
* The batteries included ghengin does not enforce linearity everywhere on the users
* Some functions might still require linear types, that's a good thing: even though not every single thing must be tracked linearly in the monadic binding, certain things might still require linearity
* We can drop `linear-apecs` and all those hacks which are just plain wrong really.
* We'll more clearly manage renderer resources whithin the renderer (and no longer in the apecs store, which was also not a great design decision)
* I'm still unsure of how exactly to do this split between unrestricted/linear while keeping safety of resources. I think it will come down to exposing just the right amount of linear functions for the things that do need linearity, but I don't think it'll be easy
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.