For what it's worth, I do sometimes define a version of MonadReader's "local" for MonadState; it runs a State computation on a transformed State. I've heard this used often enough to wonder why it's not a standard part of MonadState.

On Wed, Nov 20, 2019 at 3:41 PM Viktor Dukhovni <ietf-dane@dukhovni.org> wrote:
> On Nov 20, 2019, at 1:08 PM, Jacques Carette <carette@mcmaster.ca> wrote:
>
> In the particular case of interest, I am interested in is actually b -> State a c -> (State (a,b) c), which is of course a special case of the above.
>
> Use case: a Stateful computation where a local sub-computation needs more (local) state that will be, in-time, de-allocated.

Perhaps I misunderstood your use-case, but it seems that with a local
sub-computation that needs extra state you can just:

        ...
        st <- get
        (c, (st', _)) <- runStateT local (st, extra)
        put st'
        ...

where local :: StateT (a, b) m c.

--
        Viktor.

_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
Only members subscribed via the mailman list are allowed to post.


--
brandon s allbery kf8nh
allbery.b@gmail.com