首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dhall无效替代类型

dhall无效替代类型
EN

Stack Overflow用户
提问于 2021-07-20 00:33:30
回答 1查看 87关注 0票数 2

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

FunctionCode.dhall

代码语言:javascript
复制
{- Function Code union -}

let StaticFC = ./StaticFunctionCode.dhall
let DynamicFC = ./DynamicFunctionCode.dhall

in < Static : StaticFC | Dynamic : DynamicFC >

StaticFC和DynamicFC这两种类型的定义如下:

StaticFunctionCode.dhall

代码语言:javascript
复制
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

代码语言:javascript
复制
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语句:

代码语言:javascript
复制
let fc1 =
  FunctionCode.Dynamic FunctionCode.Dynamic::{
     idtype = FieldTypeID.U8
   , idindex =  0
   , options = [...]
   }

in {fc1}

当我对此运行dhall-to-json时,会得到以下错误:

代码语言:javascript
复制
Error: Invalid alternative type

6|  < Static : StaticFC | Dynamic : DynamicFC >

FunctionCode.dhall:6:4

我已经尝试过一些不同的组合,关于如何使用这个定义的联合,但没有运气。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-20 11:05:32

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

通过访问包含在TypeDynamicFC中的StaticFC字段,您可以轻松地修复这个问题。

代码语言:javascript
复制
let StaticFC = ./StaticFunctionCode.dhall
let DynamicFC = ./DynamicFunctionCode.dhall

in < Static : StaticFC.Type | Dynamic : DynamicFC.Type >
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68448333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档