如何处理Dhall中的枚举?

时间:2019-03-23 17:19:13

标签: dhall

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

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?
  • 还是定义我的枚举以更轻松地实现目标的更好方法?

1 个答案:

答案 0 :(得分:0)

有人提议在此处的语言中添加对带有空替代(即枚举)的联合类型的支持,该合并将在两天内合并:

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-jsondhall-to-yaml将能够利用对空替代项的新内置支持,将替代项名称呈现为字符串而不是剥离标签。在标准的下一发行版(版本7.0.0)和dhall-to-json / dhall-to-yaml的下一版本(1.2.8)中应该可用。