【问题标题】:dhall Invalid alternative typedhall 替代类型无效
【发布时间】:2021-07-20 19:05:32
【问题描述】:

我已经定义了一个包含两个元素的联合类型,如下所示:

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

我已经尝试了一些不同的组合来使用这个定义的联合,但没有运气。我错过了什么?

【问题讨论】:

    标签: dhall


    【解决方案1】:

    问题在于StaticFCDynamicFC 是值,而不是类型。但是需要类型来定义 FunctionCodeType 联合类型。

    您可以通过访问 StaticFCDynamicFC 中包含的 Type 字段轻松解决此问题:

    let StaticFC = ./StaticFunctionCode.dhall
    let DynamicFC = ./DynamicFunctionCode.dhall
    
    in < Static : StaticFC.Type | Dynamic : DynamicFC.Type >
    

    【讨论】:

    猜你喜欢
    • 2016-08-09
    • 1970-01-01
    • 2011-04-09
    • 2021-02-08
    • 2011-01-24
    相关资源
    最近更新 更多