Since the representation of newtypes is the same as the underlying type, we should be able to "derive" instances by just using the existing instance directly.
Suggested syntax:
newtype Trace a = Trace (Eff (trace :: Trace) a) deriving (functorEff, applyEff, applicativeEff, bindEff, monadEff)
Note this would allow us to apply optimizations like "magic do" to monads derived from Eff.
Since the representation of newtypes is the same as the underlying type, we should be able to "derive" instances by just using the existing instance directly.
Suggested syntax:
Note this would allow us to apply optimizations like "magic do" to monads derived from
Eff.