首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dhall协会列表

Dhall协会列表
EN

Stack Overflow用户
提问于 2019-03-29 19:05:31
回答 1查看 93关注 0票数 1

我有一个Union类型,我希望有一个字段是一个关联列表。

代码语言:javascript
复制
let Blah = < First : { name : Text, params: XXX } | Second : { name : Text } >

在这里,我希望params是一个关联列表,这样当我输入检查记录值时,它就会传递,例如

代码语言:javascript
复制
Blah.First { name = "Alex", params: [{ mapKey = "a", mapValue = 1 }] }

那么,在Blah中,XXX应该是什么类型呢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-30 09:09:19

答案取决于存储在关联列表中的值的类型。在最一般的情况下,您可以在mapValue的类型上参数化Blah类型,如下所示:

代码语言:javascript
复制
let Blah =
        λ(a : Type)
      → < First :
            { name : Text, params : List { mapKey : Text, mapValue : a } }
        | Second :
            { name : Text }
        >

in  (Blah Natural).First
    { name = "Alex", params = [ { mapKey = "a", mapValue = 1 } ] }

如果您提前知道了所需的mapValue类型,则可以对其进行硬编码,而不是使Blah成为某个类型的函数。或者,如果您计划对同一mapValue类型多次使用Blah,您可以这样做:

代码语言:javascript
复制
let Blah =
        λ(a : Type)
      → < First :
            { name : Text, params : List { mapKey : Text, mapValue : a } }
        | Second :
            { name : Text }
        >

let Foo = Blah Natural

in  [ Foo.First { name = "Alex", params = [ { mapKey = "a", mapValue = 1 } ] }
    , Foo.Second { name = "John" }
    ]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55416077

复制
相关文章

相似问题

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