我定义了一个包含两个元素的联合类型,如下所示:
FunctionCode.dhall
{- Function Code union -}
let StaticFC = ./StaticFunctionCode.dhall
let DynamicFC = ./DynamicFunctionCode.dhall
in < Static : StaticFC | Dynamic : DynamicFC >StaticFC和DynamicFC这两种类型的定义如下:
StaticFunctionCode.dhall
let FieldList = ./FieldList.dhall
let FunctionCodeType = ./FunctionCodeType.dhall
in
{ Type =
{ dlc : Natural
, fields : FieldList
, telemjson : Text
, fct : Natural
, timestamp : Optional Text
}
, default = { timestamp = None Text, fct = FunctionCodeType.Static }
}DynamicFunctionCode.dhall
let FieldTypeID = ./FieldTypeID.dhall
let OptionList = ./OptionList.dhall
let FunctionCodeType = ./FunctionCodeType.dhall
in
{ Type =
{ idtype : FieldTypeID
, idindex : Natural
, options : OptionList
, fct : Natural
, timestamp : Optional Text
}
, default = { timestamp = None Text, fct = FunctionCodeType.Dynamic }
}忽略定义的其他类型,下面是我如何使用这个联合来编写一个let语句:
let fc1 =
FunctionCode.Dynamic FunctionCode.Dynamic::{
idtype = FieldTypeID.U8
, idindex = 0
, options = [...]
}
in {fc1}当我对此运行dhall-to-json时,会得到以下错误:
Error: Invalid alternative type
6| < Static : StaticFC | Dynamic : DynamicFC >
FunctionCode.dhall:6:4我已经尝试过一些不同的组合,关于如何使用这个定义的联合,但没有运气。我遗漏了什么?
发布于 2021-07-20 11:05:32
问题是StaticFC和DynamicFC是值,而不是类型。但是需要使用类型来定义FunctionCodeType联合类型。
通过访问包含在Type和DynamicFC中的StaticFC字段,您可以轻松地修复这个问题。
let StaticFC = ./StaticFunctionCode.dhall
let DynamicFC = ./DynamicFunctionCode.dhall
in < Static : StaticFC.Type | Dynamic : DynamicFC.Type >https://stackoverflow.com/questions/68448333
复制相似问题