Idris:是否可以使用“with”重写所有函数以使用“case”而不是“with”?如果不是,能举个反例吗?

2023-11-22

在 Idris 中,是否可以使用“重写所有函数”with” 使用“case”而不是“with”?

如果不是,能举个反例吗?


不可能。当你模式匹配时with,上下文中的类型将使用从匹配的构造函数中提取的信息进行更新。case不会导致此类更新。

例如,以下适用于with但不与case:

import Data.So

-- here (n == 10) in the goal type is rewritten to True or False
-- after the match
maybeTen : (n : Nat) -> Maybe (So (n == 10))
maybeTen n with (n == 10)
  maybeTen n | False = Nothing
  maybeTen n | True  = Just Oh

-- Here the context knows nothing about the result of (n == 10)
-- after the "case" match, so we can't fill in the rhs
maybeTen' : (n : Nat) -> Maybe (So (n == 10))
maybeTen' n = case (n == 10) of
  True  => ?a 
  False => ?b
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Idris:是否可以使用“with”重写所有函数以使用“case”而不是“with”?如果不是,能举个反例吗? 的相关文章

  • Idris:是否可以使用“with”重写所有函数以使用“case”而不是“with”?如果不是,能举个反例吗?

    在 Idris 中 是否可以使用 重写所有函数 with 使用 case 而不是 with 如果不是 能举个反例吗 不可能 当你模式匹配时with 上下文中的类型将使用从匹配的构造函数中提取的信息进行更新 case不会导致此类更新 例如 以
  • 有限的数字如何运作? (依赖类型)

    我对依赖类型语言感兴趣 有限数对我来说似乎非常有用 例如 安全地索引固定大小的数组 但这个定义对我来说并不清楚 Idris 中有限数的数据类型可以如下 Agda 中可能类似 data FiniteNum Natural gt Type wh
  • 在 Coq 中实现向量加法

    在某些依赖类型语言 例如 Idris 中实现向量加法相当简单 根据维基百科上的例子 import Data Vect default total pairAdd Num a gt Vect n a gt Vect n a gt Vect n
  • 在编译时确定 Nat 是否能被 5 整除的函数

    Using Cactus有帮助answer 我尝试编写一个函数 给定一个Nat 将返回Nat如果它能被整除5 onlyModBy5Helper n Nat gt k Nat k mod 5 0 gt Nat onlyModBy5Helper
  • 代表自由团体的好方法是什么?

    很容易表示自由岩浆 二叉叶树 自由半群 非空列表 和自由幺半群 列表 并且不难证明它们实际上就是它们所声称的那样 但自由团体似乎要棘手得多 似乎至少有两种方法可以使用通常的方法List Either a 表示 将要求编码为类型 如果您有Le
  • 类型参数和索引之间的区别?

    我是依赖类型的新手 对两者之间的区别感到困惑 似乎人们通常说类型是由另一种类型参数化 and 按某个值索引 但是 在依赖类型语言中 类型和术语之间不是没有区别吗 参数和指数之间的区别是根本性的吗 您能否举例说明它们在编程和定理证明中的含义差
  • 如何在类型中编码可能的状态转换?

    我试图在 Haskell 中复制这段 Idris 代码 它通过类型强制执行正确的操作顺序 data DoorState DoorClosed DoorOpen data DoorCmd Type gt DoorState gt DoorSt
  • 仅数学证明助理

    大多数证明助手都是具有依赖类型的函数式编程语言 他们可以证明程序 算法 相反 我感兴趣的是最适合数学且仅适合数学 例如微积分 的证明助手 你能推荐一个吗 我听说过 Mizar 但我不喜欢源代码被关闭 但如果它最适合数学 我会使用它 Agda
  • 在 Idris 中证明如果 n = m 且 m = o,则 n + m = m + o?

    我正在尝试通过查看一些练习来提高我的伊德里斯技能软件基础 https softwarefoundations cis upenn edu lf current toc html 最初是为 Coq 设计的 但我希望对 Idris 的翻译不会太
  • 依赖类型:依赖对类型与不相交联合有何相似之处?

    我一直在研究依赖类型 我了解以下内容 Why 通用量化 https en wikipedia org wiki Universal quantification被表示为依赖函数类型 x A B x means 对全部x类型的A有一个类型的值
  • 如何实现参数化元组的“Show”接口?

    I have Coord将 n 维大小转换为给定大小限制的坐标类型的函数 Coord 2 3 Fin 2 Fin 3 import Data Fin import Data List Size Type Size List Nat Coor
  • 伊德里斯热切评价

    In Haskell 我可能会实施if像这样 if True x y x if False x y y spin 0 spin n spin n 1 This 行为符合我的预期 haskell gt if True spin 1000000
  • 函数类型中的 Plus 与 S

    以下向量声明cons cons a gt Vect n a gt Vect n 1 a cons x xs x xs 因错误而失败 Type mismatch between S n and plus n 1 而下面的向量append编译并
  • (xs : Vect n elem) -> Vect (n * 2) elem

    这本书使用 Idris 进行类型驱动开发 https www manning com books type driven development with idris提出这个练习 定义一个适合签名的可能方法 two xs Vect n el
  • 无法声明 MonadPlus 接口受 Monad 约束

    我试图像这样声明 MonadPlus 接口 module NanoParsec Plus access public export interface Monad m gt MonadPlus m where zero m a plus m
  • Idris - 在 n 维向量上映射操作

    我在 Idris 中定义 n 维向量如下 import Data Vect NDVect Num t gt rank Nat gt shape Vect rank Nat gt t Type gt Type NDVect Z t t NDV
  • 使用 Idris 实现 isLast

    查看 Idris 类型驱动开发中的练习 9 2 data Last List a gt a gt Type where LastOne Last value value LastCons prf Last xs value gt Last
  • Haskell/Idris 中的开放类型级别证明

    在 Idris Haskell 中 可以通过注释类型并使用 GADT 构造函数 例如使用 Vect 来证明数据的属性 但这需要将属性硬编码到类型中 例如 Vect 必须是与 List 不同的类型 是否有可能拥有具有开放属性集的类型 例如同时
  • 伊德里斯中的快速排序

    我正在学习 Idris 我想我会尝试为 Vect 类型实现快速排序 但我在使用实用方法时遇到了困难 该方法应该给定一个主元元素和一个向量 将向量分成两部分 一个元素的元素 主元 另一个元素的元素 gt 主元 这对于列表来说很简单 split
  • Haskell 和 Idris 之间的区别:类型宇宙中运行时/编译时的反映

    因此 在 Idris 中 编写以下内容是完全有效的 item b Bool gt if b then Nat else List Nat item True 42 item False 1 2 3 cf https www youtube

随机推荐

  • .NET 中每个文件规则一个类? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我遵循这条规则 但我的一些同事不同意它 并认为如果一个类较小 它可以与其他类留在同一个文件中 我经常听到的另一个论点是 连微软都不这样做 那我们为什么要这样做呢 对此 普遍的共识是什么 在
  • 模板概念进入了 c++14 吗?

    概念是一个很好的功能 例如 当模板实例化出现问题时 它可以用可读的消息替换丑陋的编译器错误输出 不幸的是他们没有得到to C 11 有人知道它是否进入了 C 14 吗 No but 对 Bjarne Stroustrup 的采访表示它们将被
  • 如何将 FOS\RestBundle 的默认格式指定为 json?

    我对应的配置是 fos rest view view response listener force sensio framework extra view annotations false 将路线指定为确实很烦人 Route jobs
  • Python 过滤器/最大组合 - 检查空迭代器

    使用Python 3 1 我知道这个问题已经被问过很多次 用于测试迭代器是否为空的一般问题 显然 对此没有简洁的解决方案 我猜是有原因的 迭代器在被要求返回下一个值之前并不真正知道它是否为空 不过 我有一个具体的例子 希望我能从中编写出干净
  • 如何将字符串转换为 IP 地址,反之亦然

    如何转换字符串 ipAddress struct in addr 反之亦然 如何提交未签名的长 ip 地址 谢谢 Use inet ntop and inet pton 如果你需要其他方式 不使用inet ntoa inet aton 类似
  • Java 6 启动画面

    我一直无法让 Java 6 启动屏幕正常工作 我已经尝试了我能想到的一切 我的manifest mf包含 Manifest Version 1 0 X COMMENT Main Class will be added automatical
  • 推断 CRTP 中模板化成员函数的返回类型

    是否可以推断 CRTP 基类中模板化成员函数的返回类型 虽然推断参数类型效果很好 但返回类型却失败了 考虑下面的例子 include
  • M1(Apple Silicon)上的 CocoaPods 失败,架构错误

    由于 ffi 问题 在 M1 MacBook 上运行 pod install 失败 如上所述here 我遵循了一些解决方法 我想我以不同的顺序尝试了所有这些方法 但现在我得到了一个略有不同的错误 LoadError dlopen opt h
  • 将 java.util.Calendar ISO 8601 格式转换为 java.sql.Timestamp

    我有一个 ISO 8601 日期格式的日期2015 09 08T01 55 28Z 我使用此代码将 ISO 8601 命运转换为 Calendar 对象 Calendar cal javax xml bind DatatypeConvert
  • 如何在SQL表中插入默认值?

    我有一个这样的表 create table1 field1 int field2 int default 5557 field3 int default 1337 field4 int default 1337 我想插入具有 field2
  • 将浮点数转换为字符串的最快 C++ 方法

    我遇到了将浮点数转换为字符串的问题to string对我来说太慢了 因为我的数据可能涉及几百万个浮点数 我已经有了解决方案如何快速写出这些数据 然而 在解决这个问题之后 我很快意识到浮点到字符串的转换正在留下很大的影响 那么 除了使用其他非
  • SVG 中的 HTML

    我想在一个文件中添加一些 HTML 标记SVG绘画 据我所知 这是不可能的SVG 图像显示在浏览器中 有没有办法画HTML上面的SVG 因为我想使用CSS table特点HTML the SVG
  • 如何以编程方式创建给定网站的屏幕截图?

    我希望能够创建给定网站的屏幕截图 但该网站可能大于屏幕上可以查看的大小 我有办法做到这一点吗 目标是在 WinForms 应用程序中使用 C 中的 NET 来完成此操作 有一些工具 问题是 您需要在某个给定的程序中渲染它 并拍摄它的快照 我
  • Eclipse 选项卡损坏了如何修复?

    我刚刚下载了 eclipse 但它显示的语言是错误的 我该如何解决这个问题 这是由 Windows 中的字体设置引起的 它描述于thisEclipse 错误报告 由于不是 Eclipse 错误而关闭 您应该能够在 Eclipse 中通过更改
  • CakePHP 中的模型可以有多个表吗?

    CakePHP 中的模型可以有多个表吗 从说明书上这句话猜测 模型通常是数据库的访问点 更具体地说 是数据库中某个表的访问点 默认情况下 每个模型都使用其名称的复数形式的表 即 User 模型使用 users 表 我不这么认为 但你可以建立
  • PHP 中参数类型可以特化吗

    假设我们有以下两个类 abstract class Foo public abstract function run TypeA object class Bar extends Foo public function run TypeB
  • 如何自动缩放字体大小以适应 div 的内容?

    我有一个带有一些文本的 div div style width 50px With some text in it div 如何缩放文本的字体大小以使所有文本都可见 反之亦然 您可以将文本包装在内部 DIV 中 并使用 JavaScript
  • 有关 Azure 实例分配带宽的问题

    我从 Azure 了解到一些事实 每个实例的带宽有限 例如 Extra Small 实例有 5Mb s 我们只支付出站带宽 入站免费 同一个数据中心 流量免费 即使对于小实例 我检查了网络接口 连接速度为10G 因此分配的带宽始终低于网络接
  • 使用通知模式进行域验证

    从历史上看 我在对象的构造函数中对对象进行了验证 并在验证失败时抛出异常 例如 class Name const MIN LENGTH 1 const MAX LENGTH 120 private value public function
  • Idris:是否可以使用“with”重写所有函数以使用“case”而不是“with”?如果不是,能举个反例吗?

    在 Idris 中 是否可以使用 重写所有函数 with 使用 case 而不是 with 如果不是 能举个反例吗 不可能 当你模式匹配时with 上下文中的类型将使用从匹配的构造函数中提取的信息进行更新 case不会导致此类更新 例如 以