传递文件名作为参数读取
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 进行大量重构。
我的配置从文件中读取证书。
这是一个简单的方法:
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 进行大量重构。