Question

I just read the tutorial at https://www.fpcomplete.com/user/tel/lens-aeson-traversals-prisms, and I have successfully written a query into a json bytestring. However, I am not getting the kind of result value I want.

I'd like to do something along the lines of

if (j^? key "some key" == Just "Google") then ...
                                         else ...

But (j^? key "some key") has the type "Maybe Value".

This must be a common enough pattern that I'd be surprised if there wasn't a utility function to turn a Value into a Text. Any ideas?

Was it helpful?

Solution

There is! The _String Prism has type Prism' Value Text, i.e. it attempts to traverse down the branch of Value containing a Text. So you can do j ^? key "some key" . _String == Just "Google".

OTHER TIPS

My lens-fu is pretty limited, but looks like you need _String method of AsPrimitive:

if (j^? key "some key" >>= (^? _String)) == Just "Google"

Or you can convert the right part to Value:

if (j^? key "some key" == Just (String "Google"))
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top