_______________________________________________Normally, you'd write `gets` to access entries in your state environment according to some function (e.g. record accessors), but since `some_property` is itself (presumably) a `Lens` or `Getter`, you should be able to use the lensy-State accessor `use`(https://github.com/ekmett/lens/blob/e06c171840bbe86c789b8dff8c8211b88ac9211e/src/Control/Lens/Getter.hs#L347). Then, your script becomes:```myFunc :: StateT MyState [ResultType]
myFunc = dop ← use some_propertycase p ofTrue → do my_value .= "Hello"False → do my_value .= "Goodbye"````use` works in the same sense that `view` does for `MonadReader r m ⇒ m`. It even has an analog to `preview` called `preuse`, which you can use for `Prism`s in your state environment.Cheers, hope that helps,EmilyOn Sat, Mar 21, 2020 at 10:42 AM, Michael Hull <mikehulluk@gmail.com> wrote:Hi,I use the State monad in a lot of places, but when I use it with the lens library, I find myself writing code like:myFunc :: StateT MyState ([ResultType])myFunc = dost <- getcase st ^. some_property ofTrue -> domy_value .= "Hello"True -> domy_value .= "Goodbye"I want to do something based on a 'state-variable', but I have to write 'get' -- is there a pattern that allows me to avoid the intermediate 'st' variable?I want to write something like:myFunc = docase (get ^. some_property) ofTrue -> domy_value .= "Hello"True -> domy_value .= "Goodbye"but that won't compile.Best wishes,Mike_______________________________________________
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.
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.