Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用Dhall将递归类型编码为JSON

使用Dhall将递归类型编码为JSON
EN

Stack Overflow用户
提问于 2021-07-21 14:39:25
回答 1查看 59关注 0票数 1

我想要的输出的简化版本:

代码语言:javascript
运行
AI代码解释
复制
{
  "dynamic-name": {
    "type": "type",
    "fields": {
      "inner-dynamic-name": {
        "type": "inner-type",
        "analyzer": "analyzer"
      }
    }
  }
}

下面是我用来生成它的Dhall代码:

代码语言:javascript
运行
AI代码解释
复制
let Field
    : Type
    = (Field : Type) ( Leaf
        : { mapKey : Text, mapValue : { type : Text, analyzer : Optional Text } } →
            Field
        ) ( Node
        : { mapKey : Text, mapValue : { type : Text, fields : List Field } } →
            Field
        ) →
        Field

let example
    : Field
    = λ(Field : Type)λ ( Leaf
        : { mapKey : Text, mapValue : { type : Text, analyzer : Optional Text } } →
            Field
        )λ ( Node
        : { mapKey : Text, mapValue : { type : Text, fields : List Field } } →
            Field
        ) →
        Node
          { mapKey = "dynamic-name"
          , mapValue =
            { type = "type"
            , fields =
              [ Leaf
                  { mapKey = "inner-dynamic-name"
                  , mapValue =
                    { type = "inner-type", analyzer = Some "analyzer" }
                  }
              ]
            }
          }

in  example

但是,在将我的Dhall配置传递给dhall-to-json时,我得到以下错误:

代码语言:javascript
运行
AI代码解释
复制
Error: Cannot translate to JSON                                            
                                                                                
Explanation: Only primitive values, records, unions, ❰List❱s, and ❰Optional❱    
values can be translated from Dhall to JSON                                     
                                                                                
The following Dhall expression could not be translated to JSON:λ(_ : Type)λ ( _
    : { mapKey : Text, mapValue : { analyzer : Optional Text, type : Text } } →
        _@1
    )λ(_ : { mapKey : Text, mapValue : { fields : List _@1, type : Text } } → _@2) →
    _
      { mapKey = "dynamic-name"
      , mapValue =
        { fields =
          [ _@1
              { mapKey = "inner-dynamic-name"
              , mapValue = { analyzer = Some "analyzer", type = "inner-type" }
              }
          ]
        , type = "type"
        }
      }

我运行的是1.7.6版的dhall-to-json。我做错了什么?

(忽略:我需要包含更多的单词才能允许发布我的问题,但任何更多的内容似乎都是多余的。最后一句话是我是黑客。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-22 17:30:05

我将我的答案从https://github.com/dhall-lang/dhall-haskell/issues/2259复制到这里:

dhall-to-json不能直接处理自定义递归类型,但它可以处理一种可区分的递归类型,即Prelude.JSON.Type,所以下面这样的代码就可以工作了:

代码语言:javascript
运行
AI代码解释
复制
let JSON =
      https://prelude.dhall-lang.org/JSON/package.dhall
        sha256:5f98b7722fd13509ef448b075e02b9ff98312ae7a406cf53ed25012dbc9990ac

let Field
    : Type
    = (Field : Type) ( Leaf
        : { mapKey : Text
          , mapValue : { type : Text, analyzer : Optional Text }
          } →
            Field
        ) ( Node
        : { mapKey : Text, mapValue : { type : Text, fields : List Field } } →
            Field
        ) →
        Field

let example
    : Field
    = λ(Field : Type)λ ( Leaf
        : { mapKey : Text
          , mapValue : { type : Text, analyzer : Optional Text }
          } →
            Field
        )λ ( Node
        : { mapKey : Text, mapValue : { type : Text, fields : List Field } } →
            Field
        ) →
        Node
          { mapKey = "dynamic-name"
          , mapValue =
            { type = "type"
            , fields =
              [ Leaf
                  { mapKey = "inner-dynamic-name"
                  , mapValue =
                    { type = "inner-type", analyzer = Some "analyzer" }
                  }
              ]
            }
          }

let Field/toJSON
    : Field → JSON.Type
    = λ(field : Field) →
        field
          JSON.Type
          ( λ ( args
              : { mapKey : Text
                , mapValue : { type : Text, analyzer : Optional Text }
                }
              )JSON.object
                [ { mapKey = args.mapKey
                  , mapValue =
                      JSON.object
                        ( toMap
                            { type = JSON.string args.mapValue.type
                            , analyzer =
                                merge
                                  { None = JSON.null, Some = JSON.string }
                                  args.mapValue.analyzer
                            }
                        )
                  }
                ]
          )
          ( λ ( args
              : { mapKey : Text
                , mapValue : { type : Text, fields : List JSON.Type }
                }
              )JSON.object
                [ { mapKey = args.mapKey
                  , mapValue =
                      JSON.object
                        ( toMap
                            { type = JSON.string args.mapValue.type
                            , fields = JSON.array args.mapValue.fields
                            }
                        )
                  }
                ]
          )

in  Field/toJSON example

…而dhall-to-json接受这一点:

代码语言:javascript
运行
AI代码解释
复制
$ dhall-to-json --file ./example.dhall
代码语言:javascript
运行
AI代码解释
复制
{
  "dynamic-name": {
    "fields": [
      {
        "inner-dynamic-name": {
          "analyzer": "analyzer",
          "type": "inner-type"
        }
      }
    ],
    "type": "type"
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68471542

复制
相关文章
Pandas 查找,丢弃列值唯一的列
数据清洗很重要,本文演示如何使用 Python Pandas 来查找和丢弃 DataFrame 中列值唯一的列,简言之,就是某列的数值除空值外,全都是一样的,比如:全0,全1,或者全部都是一样的字符串如:已支付,已支付,已支付…
萝 卜
2022/05/12
6.1K0
Pandas 查找,丢弃列值唯一的列
Pandas重复值处理
import pandas as pd #生成数据 data1,data2,data3,data4=['a',3],['b',2],['a',3],['c',2] df=pd.DataFrame([data1,data2,data3,data4],columns=['col1','col2']) print(df) col1 col2 0 a 3 1 b 2 2 a 3 3 c 2 #判断数据 isDuplicated=df.duplicat
hankleo
2020/09/17
8160
python 使用pandas 去除csv重复项
subset : column label or sequence of labels, optional 用来指定特定的列,默认所有列 keep : {‘first’, ‘last’, False}, default ‘first’ 删除重复项并保留第一次出现的项 inplace : boolean, default False 是直接在原来数据上修改还是保留一个副本
kirin
2021/04/19
5.5K0
python 使用pandas 去除csv重复项
python | pandas 改变列的位置、填充缺失值
本期的文章源于工作中,需要固定label的位置,便于在spark模型中添加或删除特征,而不影响模型的框架或代码。 spark的jupyter下使用sql 这是我的工作环境的下情况,对你读者的情况,需要具体分析。 sql = ''' select * from tables_names -- hdfs下的表名 where 条件判断 ''' Data = DB.impala_query(sql) -- 是DataFrame格式 **注意:**DB是自己写的脚本文件 改变列的
努力在北京混出人样
2019/02/18
5.2K0
python | pandas 改变列的位置、填充缺失值
本期的文章源于工作中,需要固定label的位置,便于在spark模型中添加或删除特征,而不影响模型的框架或代码。 spark的jupyter下使用sql 这是我的工作环境的下情况,对你读者的情况,需要具体分析。 sql = ''' select * from tables_names -- hdfs下的表名 where 条件判断 ''' Data = DB.impala_query(sql) -- 是DataFrame格式 **注意:**DB是自己写的脚本文件 改变列的位置 前
努力在北京混出人样
2018/05/14
5.5K0
Pandas基础:查找与输入最接近的值
有时候,我们试图使用一个值筛选数据框架,但是这个值不存在,这样我们会接收到一个空的数据框架,这不是我们想要的。我们想要的是,在数据框架中找到与这个输入值最接近的值。
fanjy
2022/06/04
4K0
Pandas基础:查找与输入最接近的值
pandas’_pandas 删除列
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/02
2.7K0
pandas’_pandas 删除列
查找-散列查找
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。
全栈程序员站长
2022/08/28
1.5K0
查找-散列查找
使用pandas筛选出指定列值所对应的行
该方法其实就是找出每一行中符合条件的真值(true value),如找出列A中所有值等于foo
星星在线
2020/05/22
19.6K0
删除重复值,不只Excel,Python pandas更行
在Excel中,我们可以通过单击功能区“数据”选项卡上的“删除重复项”按钮“轻松”删除表中的重复项。确实很容易!然而,当数据集太大,或者电子表格中有公式时,这项操作有时会变得很慢。因此,我们将探讨如何使用Python从数据表中删除重复项,它超级简单、快速、灵活。
fanjy
2022/04/13
6.2K0
删除重复值,不只Excel,Python pandas更行
散列查找和哈希查找_散列检索
散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。建立了关键字与存储位置的映射关系,公式如下:
全栈程序员站长
2022/11/15
9330
【Python】基于某些列删除数据框中的重复值
Python按照某些列去重,可用drop_duplicates函数轻松处理。本文致力用简洁的语言介绍该函数。
阿黎逸阳
2020/09/08
21.6K0
【Python】基于某些列删除数据框中的重复值
散列查找
散列同顺序、链接和索引一样,是又一种数据存储方法。散列存储的方法是:以数据集合中的每个元素的关键字k为自变量,通过一种函数h(k)计算出函数值,把这个值用做一块连续存储空间(即数组或文件空间)中的元素存储位置(即下标),将该元素存储到这个下标位置上。散列存储中使用的函数h(k)被称为散列函数或哈希函数,它实现关键字到存储位置(地址)的映射(或称转换),h(k)被称为散列地址或哈希地址;使用的数组或文件空间是对数据集合进行散列存储的地址空间,所以被称为散列表或哈希表。在散列表上进行查找时,首先根据给定的关键字k,用与散列存储时使用的同一散列函数h(k)计算出散列地址,然后按此地址从散列表中取出对应的元素。
全栈程序员站长
2022/08/27
1.3K0
散列查找
用过Excel,就会获取pandas数据框架中的值、行和列
至此,我们已经学习了使用Python pandas来输入/输出(即读取和保存文件)数据,现在,我们转向更深入的部分。
fanjy
2021/11/29
20.2K0
用过Excel,就会获取pandas数据框架中的值、行和列
【Python】基于多列组合删除数据框中的重复值
最近公司在做关联图谱的项目,想挖掘团伙犯罪。在准备关系数据时需要根据两列组合删除数据框中的重复值,两列中元素的顺序可能是相反的。
阿黎逸阳
2020/09/08
15.5K0
python删除重复值、排序、查找最多元素等操作
python删除重复值、排序、查找最多元素等操作 1、删除重复值、主要是列表和集合操作 2、关于排序,主要是对列表、元组、多重列表、集合以及对象排序 3、查找列表中出现最多的元素 # 删除可散列对象重复值,按集合规则顺序排序 def delrepdata(items): return set(items) # 删除可散列对象重复值,元素显示顺序不变 def delrepdatawithnochangeorder(items): datas=set() for item in ite
python与大数据分析
2022/03/11
8210
pandas处理缺失值的函数_pandas填充缺失值
df.dropna()函数用于删除dataframe数据中的缺失数据,即 删除NaN数据.
全栈程序员站长
2022/09/30
2.1K0
PP-数据建模:明明删除了重复项,为什么还是说有重复值?
最近,有朋友在用Power Pivot构建表间关系的时候,出现了一个问题:明明我已经删除了重复项,但构建表间关系的时候,还是说我两个表都有重复的数据!结果表间关系建立不起来!
大海Power
2021/08/30
3.8K0
Access重复项查询
大家好上节介绍了汇总查询,继续介绍选择查询中的重复项查询和不匹配项查询,这两种查询都可以在查询向导中创建,本节主要介绍重复项查询。
无言之月
2020/06/02
1.9K0
Access重复项查询
使用Pandas实现1-6列分别和第0列比大小得较小值
前几天在Python白银交流群【星辰】问了一个pandas处理Excel数据的问题,提问截图如下:
Python进阶者
2023/03/02
1.3K0
使用Pandas实现1-6列分别和第0列比大小得较小值

相似问题

Pandas -查找列的重复值

29

Pandas在两列之间放置重复项

10

Pandas Groupby和在多列中查找重复项

32

Pandas列根据other列反转值

10

在两列之间查找重复项相同的表

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档