You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
In light of apecs already providing a Monad m => MonadReader w (SystemT w m) instance (as opposed to MonadReader r m => MonadReader r (SystemT w m)) and not providing an mtl-style MonadSystem class, it makes sense and simplifies things for SystemT to be an alias of ReaderT. Deps-wise, exceptions and unliftio-core could be removed right away with the alias approach.
The one slight advantage towards the latter instance being provided along with a MonadSystem class is that users could use mtl-style over transformer stacks that include both SystemT and ReaderT. The big disadvantage though is that it's more maintenance due to mtl's n^2 instances, and so doesn't seem worth it considering I don't see any existing or closed issues where requests have been made to support mtl-style in the first place.
Would we use MonadReader everywhere?
Instead of generating Has instances, would we generate MonadReader (Store c) instances?
I think with SystemT becoming an alias for ReaderT, we can take advantage of that specialization and replace the dependency on mtl with transformers. Has instances could still be generated, but the getStore body could call transformersasks instead of mtl's asks. Any downstream code already calling mtlask/asks would work with transformersask/asks, and would largely come for free by switching the main Apecs module's import of Control.Monad.Reader to Control.Monad.Trans.Reader.
Here's a list of breaking changes to consider for v0.10.
SystemT
to anReaderT
alias. This is in light of Add MonadUnliftIO instance for SystemT #123, and the list of derived instances getting a little ridiculous.Has
instances, would we generateMonadReader (Store c)
instances?Experimental
.The text was updated successfully, but these errors were encountered: