Thankyou everybody - this is really helpful, especially the \case technique.
@Juan I am not sure my Haskell is strong enough to use zoom yet, but I will look into it!
Thanks again.

Mike


On Sat, 21 Mar 2020 at 21:12, Juan Casanova <juan.casanova@ed.ac.uk> wrote:
I'm surprised noone has mentioned 'zoom' yet. It does not make your 
original example work directly, but almost. It may be very useful to 
keep in mind as a way to do whatever you want.

http://hackage.haskell.org/package/lens-4.19.1/docs/Control-Lens-Zoom.html#v:zoom

The idea of zoom is that you use it like so:

zoom my_lens my_monadic_action

where my_monadic_action is a monadic action that works on the 
sub-element (call it 's') of the state, and the entire thing 'zoom 
my_lens my_monadic_action' is then a monadic action that works on the 
whole element (call it 't'). my_lens is a lens that focuses on 's' 
within 't'.

So instead of using the lens all the time in the monadic action, 
you're basically saying: "Put this everywhere that you need to", and 
then you can do things with the sub-element 's'.

Juan.

PS: I hope I did not severely misunderstand what you wanted, but it's 
still a possibility.

--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.


_______________________________________________
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.