当前位置: 首页 > 知识库问答 >
问题:

在singletons数据类型中使用NAT/Natural的正确方法是什么?

雷飞虎
2023-03-14
import Data.Singletons.TH
import Data.Singletons
import GHC.Natural
import Data.Singletons.TypeLits

$(singletons [d|
  data MyType = 
      PredT
    | ProcT [MyType]
    | IntT
    | FloatT
    | StringT
    | FuncT MyType MyType
    | VariantT Natural [MyType]
    | UnionT [MyType]
  |])
Couldn't match expected type ‘Natural’
     with actual type ‘Demote Natural’

我试过demote naturalNAT以及不同的导入(我想也许我没有使用singletons使用的正确的“NAT”或“Natural”),所有这些都给我带来了类似的错误。这里有什么问题?我必须为demote a!=a的类型编写singletons手动生成的定义吗?还是这里缺少了什么?

共有1个答案

申屠鹏
2023-03-14

显然这是一个尚未解决的问题。如果我没有理解错的话,当前singletonsTH脚本的工作方式是重用与升级和降级类型相同的类型,但是nat完全打破了这个模型。长期的解决方案是等待GHC合并NATNatural。同时,您必须手动复制或概括您的类型,或者滚动您自己的NAT

https://github.com/goldfirere/singletons/issues/478

作为一个短期修复,似乎可以扩展TH脚本singletons来自动执行类似的操作。这对于广泛使用单例的人来说是一个很好的贡献。

 类似资料:
  • 我有这个web应用程序在脑海中,我想储存我的供应商从不同类别的产品。我想执行一个搜索查询通过我所有的产品,以找到什么提供商我有这样的产品,并最终访问提供商的信息。 我正计划为此目的使用这种结构: 所以我的问题是,一旦我得到我想要的产品,这种方法是访问供应商信息的正确方法吗?

  • 问题内容: 我正在与我的CompSci教授交谈,他建议将所有String 方法编写为: 而不是: 这两行都可以编译,但是我想知道第一种方法的好处是什么?我一直都是后一种方式。错了吗 什么是普通/常规? 问题答案: 第一种方法确保执行比较时不会收到 NullPointerException 。当您尝试在不存在的对象上调用方法时,抛出(发生)此异常。 以下是一些相关的切线:仔细阅读风险自负 不过要注意

  • 问题内容: 我试图将某些类别方法导入我的Swift文件,但没有任何运气。 ios-Bridging-Header.h: UIColor + Hex.h 我希望自动完成功能能够揭示并 问题答案: 实际上,您的类别将转换为Swift,如下所示: 因此,您应该使用: 不过,自动完成功能在Beta版软件中可能仍然存在问题。

  • 问题内容: 我正在尝试使用一个使用大量jQuery的Layout / Template的项目。 我已经学会了将模板与ReactJS Project集成在一起,但是,我正在寻找一种可以完全替代jQuery的解决方案。 我的解决方案之一是在内部使用jQuery函数或React函数。 这种方法正确吗?这是正确的方法吗? 我在下面附上一个小例子: 这是我的职能。 问题答案: 这种方法正确吗?这是正确的方法

  • 这就是我目前拥有所有实体类的方式(此处仅显示一个以供参考) 来自lombok参考: @Data注释可能是项目Lombok工具集中最常用的注释。它结合了@ToString、@EqualsAndHashCode、@Getter和@Setter的功能。本质上,在类上使用@数据与使用默认的@ToString和@EqualsAndHashCode注释该类以及使用@Getter和@Setter注释每个字段是一

  • 问题内容: 在PHP系统中,我有一个常见的MVC情况:从包含的数据中接收请求。现在,我有三种方法来处理数据: a)仅调用和处理数据。 b)在变换的数据转换成变量,并将它们传递到。 c)将数据转换为的域对象,并将该对象仅传递给。 目前,我正在使用选项A,但是我认为这是错误的,因此我正在考虑使用选项C。 因此,根据MVC,处理数据的正确方法是什么? 编辑 目前,我没有使用任何MVC框架。 编辑2 通常