小编Sky*_*ter的帖子

使用镜头为嵌套Map添加键和值

我正在努力找出用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 lenses aeson haskell-lens

12
推荐指数
1
解决办法
1165
查看次数

函数的Haskell类型推断

最近我一直在玩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不允许我这样做.我想我非常明白为什么会这样.

问题是:有什么方法可以让我更接近后一种变体?或者和前者住在一起好吗?

谢谢!

haskell functor monomorphism-restriction

8
推荐指数
1
解决办法
105
查看次数