【问题标题】:How to handle enums in dhall?如何处理 dhall 中的枚举?
【发布时间】:2019-03-24 23:01:25
【问题描述】:

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

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 以获得这样的价值?
  • 还是一种更好的方式来定义我的枚举以更轻松地实现我的目标?

【问题讨论】:

    标签: dhall


    【解决方案1】:

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

    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)和dhall-to-json/dhall-to-yaml (1.2.8) 的下一个版本中可用。

    【讨论】:

    • 感谢您的回答。等不及这些发布了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多