【问题标题】:How to write inline YAML (flow style) in Haskell?如何在 Haskell 中编写内联 YAML(流式)?
【发布时间】:2015-12-26 19:46:43
【问题描述】:

我正在使用Data.Yaml 以人类可读的格式存储一些数据。但是,数据的某些部分是数字列表或矩阵。 YAML 输出 block sequence style 非常冗长:

- - 1
  - 2
  - 3
- - 4
  - 5

相反,我希望将这些部分编码为 flow sequence style,就像

[[1,2,3],[4,5]]

有没有办法做到这一点?

【问题讨论】:

  • 您希望生成的 YAML 包含 haskell 列表吗?
  • @rampion:可能是流序列样式列表,而不是当前的块序列样式列表。

标签: haskell yaml pretty-print aeson


【解决方案1】:

很遗憾没有。 yaml 使用 libyaml。虽然您想使用flow sequence style,但current implementation 使用YAML_ANY_SEQUENCE_STYLE (0) 而不是YAML_FLOW_SEQUENCE_STYLE (2),因此YAML_BLOCK_SEQUENCE_STYLE (1,但发射器仅检查与YAML_FLOW_SEQUENCE_STYLE 是否相等)。

这是硬编码到 Haskell 中的 toEventRaw 包装器中的。应该可以编写encodeWith,它使用特殊的toEventRawWith 并采用其他选项,但目前情况并非如此。 你可以open a feature request但是有一个feature request

编辑:确实,如果在Text/Libyaml.hs 中用2 -- YAML_FLOW_SEQUENCE_STYLE 替换所有出现的0 -- YAML_ANY_SEQUENCE_STYLEData.Yaml.encode 将返回"[[1,2,3], [4,5]]"。因此,您要么需要在本地修补库,要么提出该功能请求。

【讨论】:

    猜你喜欢
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2010-11-05
    • 1970-01-01
    • 2015-12-04
    相关资源
    最近更新 更多