传递文件名作为参数读取

时间:2019-08-27 13:55:00

标签: dhall

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

这是一种简单的方法:

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

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

1 个答案:

答案 0 :(得分:1)

当前无法执行此操作,因为该语言尚不支持“计算导入”(即,依赖于变量的导入)。

简单的解释是:

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

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

  • 导入解析先于类型检查

    ...因为无法解析具有未解析导入项的表达式

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

    ...因为您最终遇到了一个鸡和蛋的问题,其中导入分辨率取决于规格化,而规格化取决于导入分辨率。

更长的解释是,从技术上讲是可行的,但将需要消除Dhall的相位差异。当前,导入解析阶段在类型检查阶段之前,而在类型检查阶段之前是规范化阶段。实现对计算导入的支持将需要安全地交错这些阶段,这将需要对language standard进行大量重构,并对每个Dhall实现的API进行重构。