首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在dhall (Haskell)中编码` `Map ([Text],[Text]) Text‘

在dhall (Haskell)中编码` `Map ([Text],[Text]) Text‘
EN

Stack Overflow用户
提问于 2020-05-11 21:17:43
回答 1查看 168关注 0票数 1

在dhall中对Haskell类型Map ([Text], [Text]) Text进行编码的最佳方法是什么?

尝试。,我们似乎不能使用toMap来这样做:

代码语言:javascript
复制
-- ./config.dhall

toMap { foo = "apple", bar = "banana"} : List { mapKey : Text, mapValue : Text }
代码语言:javascript
复制
x <- input auto "./config.dhall" :: IO Map Text Text

因为我们需要映射的域为([Text], [Text])类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-12 15:32:53

Dhall中的Map只是mapKey/mapValue对的List

代码语言:javascript
复制
$ dhall <<< 'https://prelude.dhall-lang.org/v16.0.0/Map/Type'
λ(k : Type) → λ(v : Type) → List { mapKey : k, mapValue : v }

..。Haskell实现将类似于(a, b)的二元组编码为{ _1 : a, _2 : b },因此对应于Haskell类型的Dhall类型是:

代码语言:javascript
复制
List { mapKey : { _1 : List Text, _2 : List Text }, mapValue : Text }

您不能使用toMap来构建该类型的值,这是正确的,因为toMap只支持带有Text-valued键的Map。但是,由于Map只是特定类型List的同义词,所以可以直接写出List (就像在Haskell中使用Data.Map.fromList一样),如下所示:

代码语言:javascript
复制
let example
    : List { mapKey : { _1 : List Text, _2 : List Text }, mapValue : Text }
    = [ { mapKey = { _1 = [ "a", "b" ], _2 = [ "c", "d" ] }, mapValue = "e" }
      , { mapKey = { _1 = [ "f" ], _2 = [ "g", "h", "i" ] }, mapValue = "j" }
      ]

in  example
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61739508

复制
相关文章

相似问题

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