parametric-polymorphism相关内容
此代码无法编译: pub trait ToVec { fn to_vec(self) -> Vec; } impl ToVec for I where I: Iterator, { fn to_vec(self) -> Vec { self.collect() } } impl
..
其他潜在贡献者请注意:请不要犹豫,使用抽象或数学符号来表达您的观点.如果我发现您的答案不清楚,我会要求您解释清楚,否则请随意以舒适的方式表达自己. 明确一点:我不是在寻找“安全的"head,head 的选择也不是特别有意义.问题的核心是关于 head 和 head' 的讨论,它们用于提供上下文. 我已经用 Haskell 破解了几个月了(以至于它已经成为我的主要语言),但我承认我对一些
..
我已经阅读了一些我可以在互联网上找到的关于多态性的可能的文章.但我想我不能完全理解它的含义和重要性.大多数文章没有说明为什么它很重要以及我如何在 OOP 中(当然在 JavaScript 中)实现多态行为. 我无法提供任何代码示例,因为我不知道如何实现它,所以我的问题如下: 是什么? 我们为什么需要它? 它是如何工作的? 如何在 javascript 中实现这种多态行为?
..
我想以通用方式检查 C API 的返回代码,并且结果必须不受 C 类型的影响,例如 libc::c_int.有没有什么方法可以写一个像 这样的函数 fn check(x: S) ->选项{如果 std::num::zero::() 当我确定 S 和 T 是 check() 的所有用法的整数类型时?编译器拒绝我的代码抱怨 error: non-scalar cast: `S` as `
..
我试图掌握这两个概念之间的关系. 首先考虑一个抽象数据类型的例子: 数据树 a = Nil|节点 { 左 :: 树 a,价值 :: 一个,右 :: 树 a } 根据 Haskell 维基: 这种类型是抽象的,因为它没有定义其结构的某些方面,由数据类型的用户提供.这是抽象数据类型的弱形式.来源 现在考虑参数多态性的概念: 参数多态是指当一个值的类型包含一个或多个(不受约束
..
我正在学习 Haskell 并遇到了多态值.这些是根据上下文具有不同类型的值.例如,Nothing 的类型为 Maybe a 或 [] 的类型为 [a].所以 [] 是你想要的任何东西的列表,你可以在任何需要任何列表的地方使用它. 我很难在 Java 中找到类似的东西,除了“十亿美元的错误"null,它基本上属于任何类型.可能与无界通配符的泛型类似,但同样,我想不出一个例子. Java
..
这是我的代码: 使用 std::rc::{Rc, Weak};使用 std::cell::RefCell;特质特质{}fn push(e: E) {让 mut v:Vec>>= Vec::new();//让 x = Rc::new(RefCell::new(Box::new(e)));//v.push(x);//错误v.push(Rc::new(RefCell::new(Box::new(e))
..
我正在尝试生成一个类型化的Racket过程,该过程对于某些类型的 A ,一个 Tree 和一个来自两个 A 的函数传递给 A 的另一个参数 A ,并返回类型为 A 的值.我对(全部)语法不是很熟悉,但是我尝试使用它.不幸的是,我的代码在构建时会产生以下错误消息: 类型检查器:多态函数`foldr'无法应用于参数:类型:(-> a b b)b(Listof a)->b(-> a b c c)c(L
..
此代码无法编译: let f = fun x y -> x x ] let main _ = printfn "%d"
..
我正在设计F-Bound数据类型,并且有一个正常工作的伴随对象.我想从特征本身中引用此伴侣对象,但我无法正确选择类型. trait A[AA val data: String } case class A1(data : String) extends A[A1] trait B[BB
..
我不确定是否要在标题中描述当前的问题. 我要问的是来自以下要求. 我正在尝试为有限状态机的状态做一个抽象,并提出以下定义(在打字稿中) interface IState { send(message: T, callback?:(event: E)=>void): IState; } 我试图表达的是,有限状态机的状态应该能够接受消息并返回新状态,并带有可选的回调
..
在系统F中,多态类型的种类是*(因为无论如何这是系统F中唯一的种类...),例如对于以下封闭类型: [] ⊢ (forall α : *. α → α) : * 我想用Agda表示系统F,并且因为所有内容都在*中,所以我想将类型(如上)解释为Agda Set s;像这样 evalTy : RepresentationOfAWellKindedClosedType → Set 但
..
我已经在一个Agda项目上工作了几周,尽我所能地轻而易举地忽略了水平多态性.不幸的是(或者幸运的是)我似乎已经到达需要开始理解它的地步. 直到现在,我仅在将级别变量用作Rel的第二个参数(或REL的第三个参数)时才使用级别变量.否则,我将省略它们,而直接使用Set即可.现在,我有一些客户端代码可以明确量化级别a,并尝试将某些类型的形式Set a传递给我的现有代码,而该代码现在是多态的.在下面
..
假设我具有以下类型签名: someFunction :: (Eq a, Eq b) => a -> b 实施: someFunction x = (2 :: Int) (不要看得太深,这只是一个例子). 我对签名的理解是"someFunction接受作为Eq类型类的实例的参数,并返回作为Eq实例的值(可以是其他类型)类型类". Int是Eq的一个实例,那么GHC为什么会对
..
对于足够多态的类型,参数性可以唯一地确定函数本身(请参见是否有可能在Idris中陈述并证明这一点? (而且,如果无法在Idris内部证明这一点,那是真的吗?) 以下是我的尝试(我知道函数相等性不是Idris中的原始概念,因此我断言,泛型t -> t的任何函数总是返回与标识函数将返回的结果相同的结果): %default total GenericEndomorphism: Type
..
在阅读有关编程语言中的类型和多态性的纸张时,我想知道是否有可能用Scala在类型成员上表达相似的通用量化.本文中的示例: type GenericID = ∀A.A ↦ A 这是一种通用身份功能,下面的书面语言示例 Fun 是正确的: value inst = fun(f: ∀a.a ↦ a) (f[Int], f[Bool]) value intId = fst(inst(id)
..
考虑 (a->a) -> [a] -> Bool 此签名是否有任何有意义的定义?也就是说,一个定义不仅会忽略该参数吗? x -> [a] -> Bool 似乎有很多这样的签名可以立即排除. 解决方案 CarstenKönig在评论中建议使用自由定理.让我们尝试一下. 总理大炮 我们首先生成自由定理对应于类型(a->a) -> [a] -> Bool.著名的W
..
这是由提示的提示f = f( a w = fromInteger w ...当然,它在运行时不会起作用,但这只是问题所在.关键是w本身的定义使用 w :: Integer的专用版本.显然, 是合适的实例,因此进行类型检查. 但是,如果
..
我发现关于多态和重载有很多定义.有人说,重载是多态性的一种类型.虽然有些人说他们不一样.因为在重载中将只分配一个功能.虽然多态性需要为每个重新定义的成员函数分配内存.我对此感到非常困惑,任何人都可以为我解释一下吗? 另外,重载是否在编译时发生而多态性在运行时发生? 解决方案 您无法确定方法是多态方法,还是仅基于其签名的简单重写方法.您需要查看该方法的调用方式. 以下示例代码可能有助于
..
两者之间有什么区别 def drop1[A](l: List[A]) = l.tail 和 def drop1(l: List[Int]) = l.tail 提供的用法类似于 drop1(List(1,2,3)) ? 何时应使用一个或另一个?为什么?尽管我可以理解第二个示例,但我并不真正理解第一个示例的目的. 解决方案 真的很简单.您的第一个示例涉及泛型
..