2

我需要键入并生成一个包含字符串枚举值的配置。我设法定义了以下几行。最后,我需要将联合转换为字符串值。

let ParameterLocation = < Query : {}
                        | Header : {}
                        | Path : {}
                        | Cookie : {}
                        >
let ParameterObject = {
                          name : Text,
                          `in` : ParameterLocation,
                          required : Bool
                      }
let locationToText = \(loc : ParameterLocation) -> merge {
       Query = \(_ : {}) -> "query",
       Header = \(_ : {}) -> "header",
       Path = \(_ : {}) -> "path",
       Cookie = \(_ : {}) -> "cookie"
    } loc
let t : ParameterObject = {
    name = "organisation_id",
    `in` = ParameterLocation.Query {=},
    required = False
 }
in t // { `in` = locationToText t.`in` }

这里包含联合/枚举的记录位于顶部,因此我可以很容易地访问它,但在最终配置中,ParameterObject si 嵌套得很深。

有没有办法

  • “遍历”任意记录结构并在任何适用的地方应用 locationToText ?
  • 或者用打印机提供 dhall-to-json/dhall-to-yaml 以获得这样的价值?
  • 还是更好的方法来定义我的枚举以更轻松地实现我的目标?
4

1 回答 1

2

有一个提议为这里的语言添加对具有空替代项(即枚举)的联合类型的支持,这将在几天内合并:

https://github.com/dhall-lang/dhall-lang/pull/438

合并后,该语言将支持更多自然枚举,如下所示:

let ParameterLocation = < Query
                        | Header
                        | Path
                        | Cookie
                        >

let locationToText = \(loc : ParameterLocation) -> merge {
       Query = "query",
       Header = "header",
       Path = "path",
       Cookie = "cookie"
    } loc

...

此外,dhall-to-json并且dhall-to-yaml将能够利用对空替代项的新内置支持将替代名称呈现为字符串,而不是剥离标签。这应该在标准的下一个版本(版本 7.0.0)和 /(1.2.8)的下一个版本中dhall-to-json可用dhall-to-yaml

于 2019-03-24T15:01:25.183 回答