传递文件名作为参数读取

Passing filename to read as a parameter

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

这是一个简单的方法:

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}" }

可以吗?如果不是,已知的解决方法是什么?

目前无法执行此操作,因为该语言尚不支持 "computed imports"(即依赖于变量的导入)。

简单的解释就是:

  • 类型检查先于 substitution/normalization

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

  • 导入解析先于类型检查

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

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

    ...因为您最终会遇到先有鸡还是先有蛋的问题,其中导入分辨率取决于规范化,而规范化又取决于导入分辨率。

较长的解释是技术上可行,但需要删除 Dhall 的相位区分。目前,导入解析阶段先于类型检查阶段,后者又先于规范化阶段。实现对计算导入的支持需要安全地交错这些阶段,这将需要对 language standard 和每个 Dhall 实现的 API 进行大量重构。