3

如何为以下 Aeson Lens 表达式添加后缀

>>> "{\"a\": 4, \"b\": 7}" & members . _Number *~ 10
"{\"a\":40,\"b\":70}"

这样结果是 a Value(带有Object构造函数)而不是String?

4

2 回答 2

3

您可以使用_Value棱镜转换为Maybe Value,然后从那里开始。镜头库中的翻转fmap运算符<&>为以下情况提供了很好的语法:

"{\"a\": 4, \"b\": 7}"^? _Value <&> members . _Number *~ 10
-- Just (Object fromList [("a",Number 40.0),("b",Number 70.0)])
于 2014-04-06T16:37:25.063 回答
2

您可以使用decodefrom aeson解析您的字符串,然后像以前一样使用镜头:

ghci> (decode "{\"a\": 4, \"b\": 7}" :: Maybe Value ) & _Just . members . _Number *~ 10
Just (Object fromList [("a",Number 40.0),("b",Number 70.0)]) 
于 2014-04-06T11:42:18.370 回答