我正在努力找出用Aeson镜头操纵JSON的问题.我的任务就像在JSON中向嵌套对象添加密钥一样简单.我能够通过以下方式更改现有密钥:
> :set -XOverloadedStrings
> import Control.Lens
> import Data.Aeson
> import Data.Aeson.Lens
> "{ \"a\": { \"b\": 10 } }" & key "a" . key "b" .~ String "jee"
"{\"a\":{\"b\":\"jee\"}}"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使它处理新密钥时,它只是默默地无法添加它:
> "{ \"a\": { \"b\": 10 } }" & key "a" . key "c" .~ String "jee"
"{\"a\":{\"b\":10}}"
Run Code Online (Sandbox Code Playgroud)
当然,这是我做错了什么,但我认为我没有法术力来理解究竟是什么.
请你指点我正确的方向吗?
谢谢!
最近我一直在玩Haskell,特别是整个仿函数概念.我越深入其中,我得到的时刻越多,它肯定会让我的多巴胺受体相当多.
我坚持的问题如下.这是有效的代码,它提升了函数,然后首先将其应用于IO值,然后应用于List.
replicator1 =
fmap (replicate 3)
replicator2 =
fmap (replicate 3)
main = do
replicated <- replicator1 getLine
print (replicator2 replicated)
Run Code Online (Sandbox Code Playgroud)
以更简洁的方式编写它是非常诱人的,即:
replicator =
fmap (replicate 3)
main = do
replicated <- replicator getLine
print (replicator replicated)
Run Code Online (Sandbox Code Playgroud)
我的一部分说它在概念上是正确的,因为replicator
它既可以应用于IO也可以应用于List实例,但是作为强类型语言Haskell不允许我这样做.我想我非常明白为什么会这样.
问题是:有什么方法可以让我更接近后一种变体?或者和前者住在一起好吗?
谢谢!