type-systems相关内容

为什么定义MonadReader需要FunctionalDependency?

我刚刚理解了类的定义MonadReader class Monad m => MonadReader r m | m -> r where ... 阅读了Haskell中的函数依赖文档,现在我可以理解| m -> r指定类型变量r由m唯一决定。根据我目前所见的几个典型的MonadReader实例(例如Reader),我认为这个要求是合理的,但在我看来,即使没有这个函数依赖子句,我们仍然可 ..
发布时间:2022-04-20 14:21:32 其他开发

你在 Haskell 中发现了更高级别的类型有什么用途?

更高等级的类型看起来很有趣.这个例子来自 Haskell wikibook: foo :: (forall a.a -> a) -> (Char,Bool)foo f = (f 'c', f True) 现在我们可以评估 foo id 而不会导致编译器爆炸.这个例子在本书后面很快出现了我在其他几个地方看到的真实例子:ST monad 和 runST.这很酷. 但是我还没有遇到过这样的情况 ..

Milner 是否让多态性成为 2 级特征?

let a = b in c 可以被认为是 (\a -> c) b 的语法糖,但在一般的类型化设置中它不是案子.例如,在 Milner 演算中 let a = \x ->;x in (a True, a 1) 是可键入的,但看似等效的 (\a -> (a True, a 1)) (\x -> x) 不是. 但是,后者在系统 F 中是可键入的,第一个 lambda 为 2 级类型. 我的 ..
发布时间:2022-01-24 16:56:48 其他开发

Haskell 的多态风格是什么?

使用 Haskell 的类型类,它似乎启用了即席多态,但它的函数声明似乎是参数多态.我是否混合了我对不同事物的理解? 解决方案 确实,Haskell 支持(更高级别的)参数多态性和 ad hoc(或 有界)多态性.Haskell 中的参数多态性通过其 Hindley-Milner/System F 类型系统得到支持.通过类型类支持临时多态性. 关于类型类和即席多态性的起源,请参阅 W ..

如何轻松应对 Haskell 上的类型系统?

Haskell 的类型系统功能强大,因其数学严谨性和逻辑合理性而广受喜爱,另一方面,像下面这样幼稚的东西让我想知道为什么它不能按直觉预期工作? 例如为什么 Int 不能在 x3 上转换为 Num 但 f1 接受 Int反对签名Num? 前奏曲>让 x1 = 1前奏>:t x1x1 :: Num a =>一个前奏>让 x2 = 1 :: Int前奏>:t x2x2 :: 整数前奏>让 x3 ..
发布时间:2022-01-24 16:27:47 其他开发

为什么 Haskell 代数数据类型是“封闭的"?

如果我错了,请纠正我,但 Haskell 中的代数数据类型似乎在许多情况下很有用,您将在 OO 语言中使用类和继承.但是有一个很大的区别:代数数据类型一旦声明,就不能扩展到其他地方.它是“封闭的".在 OO 中,您可以扩展已经定义的类.例如: data 也许 a = 无 |只是一个 我无法在不修改此声明的情况下稍后以某种方式向此类型添加另一个选项.那么这个系统有什么好处呢?面向对象的方式似乎更 ..
发布时间:2022-01-02 13:55:36 其他开发

为什么我不能对结构使用 as 关键字?

我定义了以下结构: 公共结构调用{公共 SourceFile 调用者;公共 SourceFile 被调用者;公共调用(SourceFile 调用者,SourceFile 被调用者){this.caller = 来电者;this.callee = 被调用者;}} 后来,我把它赋给了另一个对象的 Tag 属性: line.Tag = new Call(sf1, sf2); 但是当我尝试像这样检 ..
发布时间:2021-12-31 22:10:24 C#/.NET

编译时和运行时强制转换 c#

我想知道为什么在编译时检查 C# 中的某些强制转换,而在其他情况下则将责任转储到 CLR 上.如上所述,两者都不正确,但处理方式不同. class Base { }派生类:基{}类 其他 { }静态无效主(字符串 [] args){派生 d = (派生)new Base();//运行时InvalidCastException派生 d = (派生)new Other();//编译时不能转换类型.. ..
发布时间:2021-12-31 21:37:29 C#/.NET

说一个类型是“装箱的"是什么意思?

我听说类型在某些语言中被称为“盒装". 在 Java 中,我听说过“自动装箱".这是什么?它是否具有类型的包装类?如果我使用装箱或未装箱类型,我的代码将如何更改? 解决方案 某些数据类型被认为是“原始的",这意味着它们不被视为对象并且不具有对象的属性. 在大多数平台上,整数和字符是原始类型但可以装箱的示例. 装箱意味着将它们包装在一个对象中,以便它们具有对象的行为. ..
发布时间:2021-12-25 13:32:14 Java开发

什么是“总和与积"?数据结构?

最近关于威廉库克融合的博文提到: 关键在于 Ensō 中的结构被视为整体的图表,而不是单个值或传统的总和和乘积数据结构. 他所指的传统 sums-and-products 数据结构是什么? 解决方案 他所指的传统 sums-and-products 数据结构是什么? 在类型理论中,常规数据结构可以用求和、乘积和递归类型来描述.这导致了用于描述数据结构(以及所谓的代数数 ..

在 OCaml 中扩展现有类型

我最近一直在做一些 OCaml 编程来学习这门语言并更熟悉函数式编程.最近,我开始认为我希望能够扩展现有类型(内置类型或我自己的类型),例如: 输入 bexp =和 bexp * bexp|或 bexp * bexp|bexp * bexp 的异或|不是 bexp;; 现在假设我想向这种类型添加一个 Nop 变体,但仅用于新类型 - 有点像继承.嘿,这些应该是代数数据类型,对吧?那么为什么不喜 ..
发布时间:2021-12-14 12:39:39 其他开发

为什么 Haskell 中不允许同时定义所有类型的函数?

这可能是一个非常基本的问题,但是...... 一个被定义为的函数,比如说 foo :: a ->整数 表示从 any 类型到整数的函数.如果是这样,那么理论上应该能够为任何类型定义它,就像这样 foo 1 = 10富 5.3 = 100富 (x:xs) = -1富 _ = 0 但是 Haskell 只允许一个通用的定义,比如 foo a = 0. 即使你将 a 限制为某一类类型 ..
发布时间:2021-12-14 12:39:32 其他开发

Haskell 奇怪的种类:种类 (->) 是 ??->?->*

当我尝试使用 Haskell 类型并尝试获得 -> 类型时,结果出现了: $ ghci...前奏>:k (->)(->) :: ??->?->*前奏> 而不是预期的 * ->* ->*.?? 和 ? 是什么东西?它们是指具体类型还是“种类变量"?或者别的什么? 解决方案 这些是 Haskell 类系统的 GHC 特定扩展.Haskell 98 报告仅指定一个简单的种类系统: .. ..
发布时间:2021-12-14 12:28:18 其他开发

为什么不依赖类型?

我看到一些消息来源回应了“Haskell 正在逐渐成为一种依赖类型的语言"的观点.这意味着随着越来越多的语言扩展,Haskell 正在朝着那个大方向漂移,但还没有. 基本上有两件事我想知道.第一个很简单,“作为一种依赖类型的语言"实际上意味着是什么?(希望不要太技术化.) 第二个问题是……缺点是什么?我的意思是,人们知道我们正朝着那个方向前进,所以它肯定有一些优势.然而,我们还没有到那 ..
发布时间:2021-12-14 12:00:07 其他开发

在 Haskell 中返回特定类型

我有一个关于 Haskell 类型系统的非常普遍的问题.我正在努力熟悉它,我有以下功能: getN :: Num a =>一个getN = 5.0 :: 双倍 当我尝试编译它时,出现以下错误: 无法将预期类型“a"与推断类型“Double"匹配`a' 是一个刚性类型变量,由Perlin.hs:15:12 中`getN' 的类型签名在表达式中: 5.0 :: Double在`getN'的定义中 ..
发布时间:2021-12-14 11:58:03 其他开发

为什么会有“数据"?和“新型"在哈斯克尔?

看起来 newtype 定义只是一个遵守一些限制(例如,只有一个构造函数)的 data 定义,并且由于这些限制,运行时系统可以更有效地处理 newtype .对未定义值的模式匹配处理略有不同. 但是假设 Haskell 只知道 data 定义,没有 newtypes:编译器不能自己找出给定的数据定义是否遵守这些限制,并自动更有效地对待它? 我确定我错过了一些东西,这一定有更深层次的原因 ..
发布时间:2021-12-14 11:49:40 其他开发

Haskell中`data`和`newtype`的区别

我写这个有什么不同? data Book = Book Int Int 对比 newtype Book = Book (Int, Int) -- "Book Int Int" 在语法上无效 解决方案 好问题! 有几个主要区别. 代表 newtype 保证您的数据在运行时具有与您包装的类型完全相同的表示. 虽然 data 在运行时声明了一个全新的数据结构. 所以这 ..
发布时间:2021-12-14 11:38:53 其他开发

Scala 中的类型系统是图灵完备的.证明?例子?好处?

有人声称 Scala 的类型系统是图灵完备的.我的问题是: 这有正式的证明吗? 一个简单的计算在 Scala 类型系统中会是什么样子? 这对 Scala - 语言有什么好处吗?与没有图灵完备类型系统的语言相比,这是否让 Scala 在某些方面更“强大"? 我想这通常适用于语言和类型系统. 解决方案 某处有一篇博客文章,其中介绍了 SKI 组合子演算的类型级实现,该算 ..
发布时间:2021-12-07 13:34:17 其他开发

依赖方法类型有哪些引人注目的用例?

依赖方法类型,以前是一个实验性功能,现在已经启用默认在后备箱中,显然这似乎创造了一些兴奋在 Scala 社区中. 乍一看,这有什么用并不是很明显.Heiko Seeberger 发布了一个简单的依赖方法类型示例这里,可以在那里的评论中看到可以使用方法的类型参数轻松重现.所以这不是一个很有说服力的例子.(我可能遗漏了一些明显的东西.如果有,请纠正我.) 对于依赖方法类型的用例,有哪些实用 ..

用于 AST 操作的 Rc 中的向下转换特征

我正在尝试在 Rust 中操作 AST.会有很多操作,我希望我的树是不可变的,所以为了节省时间,所有引用都将是 Rcs. 我的树节点将如下所示: enum 条件 {等于(Rc表达式,Rc表达式),小于(Rc表达式,Rc表达式),...}枚举表达式{加(Rc表达,Rc表达),...} 我想用另一个相同类型的节点替换给定类型的随机节点.为了对树进行通用操作,我做了一个特征: trait A ..
发布时间:2021-11-26 17:38:48 其他开发