如何在Haskell中编写内联YAML(流式)?

Pet*_*lák 2 yaml haskell pretty-print aeson

Data.Yaml用来以人类可读的格式存储一些数据.但是,数据的某些部分是数字列表或矩阵.YAML输出,块序列样式,非常详细:

- - 1
  - 2
  - 3
- - 4
  - 5
Run Code Online (Sandbox Code Playgroud)

相反,我希望这些部分以流程序列样式进行编码,就像

[[1,2,3],[4,5]]
Run Code Online (Sandbox Code Playgroud)

有办法怎么做?

Zet*_*eta 11

不幸的是.yaml用途libyaml.虽然您希望使用流序列样式,但当前实现使用YAML_ANY_SEQUENCE_STYLE(0)而不是YAML_FLOW_SEQUENCE_STYLE(2),因此YAML_BLOCK_SEQUENCE_STYLE(1,但发射器仅检查相等YAML_FLOW_SEQUENCE_STYLE).

这被硬编码到toEventRawHaskell中的包装器中.应该可以编写encodeWith,使用特殊的toEventRawWith并采用其他选项,但目前情况并非如此.你可以打开一个功能请求,但是有一个功能要求.

编辑:的确,Data.Yaml.encode将返回"[[1,2,3], [4,5]]"如果替换出现的所有0 -- YAML_ANY_SEQUENCE_STYLE2 -- YAML_FLOW_SEQUENCE_STYLEText/Libyaml.hs.因此,您需要在本地修补库,或者询问该功能请求.