Dhall协会名单
Dhall Association List
我有一个联合类型,我希望一个字段是一个关联列表。
let Blah = < First : { name : Text, params: XXX } | Second : { name : Text } >
在这里,我希望 params
成为一个关联列表,这样当我输入检查记录值时它就会通过,例如
Blah.First { name = "Alex", params: [{ mapKey = "a", mapValue = 1 }] }
那么,XXX
应该是什么类型 Blah
?
答案取决于存储在关联列表中的值的类型。在大多数情况下,您可以在 mapValue
的类型上参数化 Blah
类型,如下所示:
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
成为类型的函数。或者,如果您打算多次使用 Blah
相同的 mapValue
类型,您可以这样做:
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" }
]
我有一个联合类型,我希望一个字段是一个关联列表。
let Blah = < First : { name : Text, params: XXX } | Second : { name : Text } >
在这里,我希望 params
成为一个关联列表,这样当我输入检查记录值时它就会通过,例如
Blah.First { name = "Alex", params: [{ mapKey = "a", mapValue = 1 }] }
那么,XXX
应该是什么类型 Blah
?
答案取决于存储在关联列表中的值的类型。在大多数情况下,您可以在 mapValue
的类型上参数化 Blah
类型,如下所示:
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
成为类型的函数。或者,如果您打算多次使用 Blah
相同的 mapValue
类型,您可以这样做:
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" }
]