-> In short, my question is: how can I semantically separate instructions with effect from the others? i.e. how can I mark down and track those effects?
This is the DSL:
> data Exp a where
> ReadAccount :: Exp Int
> WriteAccount :: Exp Int -> Exp ()
> SetVictory :: Exp Bool -> Exp ()
> OnTimer :: Exp () -> Exp ()
> Return :: a -> Exp a
> Bind :: Exp a -> (a -> Exp b) -> Exp b