- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 idris 中有一个数据类型:
data L3 = Rejected | Unproven | Proven
我验证它是一个具有单位、格、群和其他一些属性的环。
现在我想创建一个对象,它保留了我注入(inject)其中的语句的表达式。我从四个类别开始来表示所有操作,因此我从中得到了一个很好的语法树。例如:
Om [Proven, Unproven, Op [Proven, Oj [Unproven, Proven]]
这不是真正的表示,我去掉了一些需要的丑陋部分,但它给出了我试图实现的目标的想法,上面等同于:
meet Proven (meet Unproven (Proven <+> (join Unproven Proven)))
我意识到我可以将这些数据类型合并为一个。为此,我创建了一个函数,它将选择正确的类实例:
%case data Operator = Join | Meet | Plus | Mult
classChoice : (x: Operator) -> (Type -> Type)
classChoice Join = VerifiedJoinSemilattice
classChoice Meet = VerifiedMeetSemilattice
classChoice Plus = VerifiedGroup
classChoice Mult = VerifiedRing
所以我可以确保该类型中的任何内容都代表这四种操作之一:
%elim data LogicSyntacticalCategory : classChoice op a => (op : Operator) -> (a : Type) -> Type where
LSCEmpty : LogicSyntacticalCategory op a
它会提示:
When elaborating type of logicCategory.LSCEmpty:
Can't resolve type class classChoice op ty
现在我的问题是:如何确保我的数据类型中的对象得到验证并将四种不同的数据类型合并为一种。我真的很想确保在施工期间这是真的。我可以理解它现在解析类型类有困难,但我希望 Idris 确保它可以在稍后的构造过程中完成。我怎样才能做到这一点?
代码并不是真正需要的,我对一个思路很满意。
最佳答案
首先是两个小问题:... -> a -> ...
应该是 ... -> (a : Type) -> ...
, 句法就是它的书写方式。
警告:我正在使用 Idris 0.9.18,还不知道如何编写 Elab 证明。
存储库:https://github.com/runKleisli/idris-classdata
在具有这些相同类型签名的普通函数中,您有机会在定义函数时通过策略协助类型类解析。但是对于数据类型及其构造函数,你只有声明它们的机会,所以你没有这样的机会来协助解析。看来这里需要这样的指导性解决方案。
看起来 classChoice op a
需要在 LSCEmpty
定义中的 LogicSyntacticleCategory op a
之前证明一个实例是有意义的,并且它没有得到这个实例。像这样的数据类型类型中的类约束通常会自动引入构造函数的上下文中,就像隐式参数一样,但这似乎在这里失败了,并且假定一个实例用于与所需类型不同的类型。为构造函数假定的实例不满足通过声明 LogicSyntacticleCategory op a
引入的目标似乎是错误。在存储库中的一个示例中,这些意外不匹配的目标和假设似乎能够自动配对,但不是在数据类型和构造函数声明的情况下。我无法找出确切的问题,但它似乎不适用于在类型签名上具有相同条件的普通函数声明。
存储库中给出了几个解决方案,但最简单的一个是替换约束参数,说 classChoice op a
的实例是必需的,带有 classChoice 类型的隐式参数op a
,并评估 LogicSyntacticleCategory
就像
feat : Type
feat = ?feat'
feat' = proof
exact (LogicSyntacticleCategory Mult ZZ {P=%instance})
如果您在数据类型的主接口(interface)中设置了约束参数,则可以包装 LogicSyntacticleCategory 的定义:(op : Operator) -> (a : Type) -> {p : classChoice op a} -> 使用函数键入
logicSyntacticleCategory : classChoice op a => (op : Operator) -> (a : Type) -> Type
logicSyntacticleCategory = ?mkLogical
mkLogical = proof
intros
exact (LogicSyntacticleCategory op a {P=constrarg})
当你想创建一个 LogicSyntacticleCategory op a
形式的类型时,像以前一样求值,但是用
feat' = proof
exact (logicSyntacticleCategory Mult ZZ)
exact Mult
exact ZZ
compute
exact inst -- for the named instance (inst) of (classChoice Mult ZZ)
匿名实例的最后一行被删除。
关于dependent-type - 在构造数据类型时选择类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257620/
如果我有一个包含 debian/control 和 Build-Depends 条目的 Depends 文件。 如何安装两组依赖项? 目前我正在使用以下命令创建一个依赖于 Build-Depends
我一直在查看衬底节点模板的Cargo.toml文件,并注意到,对于大多数 crate 而言,其依赖性如下所示: [dependencies.grandpa] package = 'sc-finalit
我在 Netbeans 7.1 IDE 中有一个 Maven 项目。 我想为 Dependencies 添加相同的依赖项和 Test Dependencies . 添加到一个中会将其从另一个中删除。
我正在尝试解决此处描述的问题: http://www.jayway.com/2013/04/12/solving-asm-conflicts-after-upgrading-to-groovy-2-1
我研究过这个问题,但找不到共识。如果“A 依赖于 B”,术语“依赖性”指的是: 一个 B A和B的关系 这个术语在计算机技术的不同子领域中是否有不同的含义? 最佳答案 B 将是依赖项。您可能会以“B
WebLogic 10.3.6Java 1.6 所以我在使用 Eclipse 时遇到了 XML 问题。 7天前我去度假之前,这一切运行良好。事实上,在我离开之前,我恢复到了旧版本,因为我在一些不太重要
在问这个问题之前,我想说 this stackoverflow 中的问题与我的问题非常相似,但概念仍然不清楚,非常困惑。 我想了解依赖倒置原则,但我无法完全理解它? 下面是DIP说的两点 A. Hig
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
我正在尝试使用 apache maven 创建一个包。当我运行 mvn clean install 命令时,出现以下错误: dependencies.dependency.version' is mi
在 Real World Ocaml Chapter 9这是关于仿函数的: Dependency injection Makes the implementations of some compone
我已经构建了类似用于创建网站的基本模板/工作流的东西,主要使用 Grunt。 该模板的一部分是 Modernizr 特征检测库,我的一项 Grunt 任务依赖于它。 目前我只是将该依赖项存储在我的 b
我有固定依赖项的 python 项目。由于第三方依赖项中的错误,在我的包中发现了错误。该依赖项已发布修复该错误的补丁。然而,根据 semantic versioning ,是否为固定依赖项的每个补丁版
使用插件io.spring.dependency-management ,我的依赖的一些版本是从其他依赖中扣除的 id("io.spring.dependency-management") versi
我有这两个表“员工表,从属表” 员工表有“ID, employee_id, employee_name” 从属表有“ID, employee_id, dependent_name, relations
我正在使用 Eclipse 中的一个 mavenised java 项目,其中有几个模块无法构建并从 pom 文件中抛出错误: Project build error: 'dependencies.d
我有一个包含多个模块的 maven 项目。在 Eclipse(Juno,带有 m2e)中,它似乎编译得很好。但是当我在其中一个模块上进行 maven 安装时,构建会立即失败。 父 pom: com
我使用 eclipse juno 创建了一个 maven 项目并编辑了 pom 文件。当我通过“mvn clean install”使用命令提示符运行 pom 文件时,出现此错误。 [ERROR] T
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
似乎包括与 provided 的直接依赖关系范围很好理解。似乎还包括带有 runtime 的传递依赖项。范围也很容易实现。 但是我如何才能包含两个间接级别的依赖项? 例子: A --> B --> C
我有以下情况: 我想在我的另一个项目中使用我的一个项目(托管在 bintray.com 上)。 我设置了一个 Maven 存储库,上传了 Artifact 和 pom 文件,然后能够使用上传到 bin
我是一名优秀的程序员,十分优秀!