1

我的配置从文件中读取证书。

这是一个简单的方法:

in { devicesCa = "${/path/to/cert/ca.crt as Text}" }

我还没有找到/path/to/cert/ca.crt作为参数传递的方法。例如:

let path = "/path/to/cert/ca.crt"
in { devicesCa = "${${path} as Text}" }

有可能吗?如果没有,已知的解决方法是什么?

4

1 回答 1

1

目前这是不可能的,因为该语言还不支持“计算导入”(即依赖于变量的导入)。

简单的解释是:

  • 类型检查先于替换/规范化

    ...因为评估无类型表达式可能会导致错误或无限循环

  • 导入解析先于类型检查

    ...因为无法对具有未解析导入的表达式进行类型检查

  • 因此,导入不能依赖于替换变量

    ...因为您最终会遇到一个先有鸡还是先有蛋的问题,其中导入解析取决于规范化,而规范化取决于导入解析。

更长的解释是它在技术上是可能的,但需要消除 Dhall 的相位差异。目前,导入解析阶段先于类型检查阶段,而类型检查阶段又先于规范化阶段。实现对计算导入的支持需要安全地交错这些阶段,这需要对语言标准进行大量重构,并对每个 Dhall 实现的 API 进行重构。

于 2019-08-27T18:59:14.830 回答