alt-romes / alt-romes/ghengin

Make Ghengin use an unrestricted monad

Open
#2 0 comments 0 reactions 1 assignee Claimed by @alt-romes View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.