动态记录键类型

时间:2019-07-10 09:15:08

标签: dhall

我正在尝试生成一些包含带有动态键的映射的YAML,如here所述。如果我使用Text键,则此方法有效,但当键具有任何其他类型时,则无效。如果可能的话,我想对密钥使用联合类型。

我尝试为mapKey使用不同的类型,包括联合类型和Natural,但没有成功。我可以通过将所有mapKey的值都转换为Text来解决此问题,但这并不理想。

这是我要做什么的一个最小示例:

let Union = <A | B>
in
[{mapKey = Union.A, mapValue = "foo"}]

我希望它会生成YAML:

A: foo

但是,生成的YAML看起来像这样:

- mapKey: A
  mapValue: foo

1 个答案:

答案 0 :(得分:0)

您的问题启发了该功能的添加,该功能将在下一版本(1.25.0版)中提供。参见:

https://github.com/dhall-lang/dhall-haskell/pull/1094

这也将在另一个方向上起作用,这意味着{json,yaml}-to-dhall将能够根据架构的要求将记录键解码为并集:

$ json-to-dhall 'List { mapKey : < A | B >, mapValue : Natural }' <<< '{"A": 1, "B": 2}'
[ { mapKey = < A | B >.A, mapValue = 1 }, { mapKey = < A | B >.B, mapValue = 2 } ]