问题标签 [parametric-polymorphism]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
194 浏览

scala - 在 Scala 中,我可以动态指定参数类型的类型参数吗?

我正在编写一个程序,其中用户在命令行上指定类的路径。我通过以下方式将它变成一个Class对象:

我有一个MyParametric[T]带有单个类型参数的参数类。然后我想做另一种 Class类型Class[ParamatricType[clazz],这样我就可以将它传递给一个方法,例如我想做类似的事情

但这是不允许的。如何使用动态给出的类型参数来实例化参数类型?

0 投票
1 回答
228 浏览

agda - Agda 中的参数利用证明

阅读这个答案促使我尝试构建并证明多态容器函数的规范形式。结构很简单,但证明让我难过。下面是我尝试编写证明的简化版本。

简化版本证明,由于参数性,足够多态的函数不能仅根据参数的选择来改变它们的行为。假设我们有两个参数的函数,一个是固定类型,一个是参数:

我想证明的属性:

Agda 内部可以证明这样的陈述吗?

0 投票
2 回答
391 浏览

java - Java中的多态值

我正在研究 Haskell 并遇到了polymorphic values。这些是根据上下文具有不同类型的值。例如,Nothing有类型Maybe a[]有类型[a][]你想要的任何东西的列表也是如此,你可以在任何需要列表的地方使用它。

我很难在 Java 中找到类似的东西,除了“十亿美元的错误” null,它基本上是任何类型的。可能与无界通配符的泛型类似,但同样,我想不出一个例子。

Java中有类似的东西吗?

0 投票
3 回答
372 浏览

functional-programming - fn 类型的 ml 函数:'a -> 'b

功能:

现在,有没有可以定义并具有这种类型的函数?

0 投票
1 回答
113 浏览

haskell - 将作为参数传递的函数应用于 Haskell 中的不同类型

有没有办法将作为参数传递的函数应用于两种不同的类型?作为一个人为的例子,我可以(Maybe Int, Maybe Bool)使用表达式创建一个(Just 3, Just True),但是如果我尝试使用该函数使这种行为更通用

这样我就可以做类似generic Just的事情,编译器会抱怨,因为类型变量a是常量。

其用例是将通用函数应用于树结构,其中每个节点都由类型参数化。

0 投票
2 回答
281 浏览

haskell - 我可以在 Haskell 中的类型/数据构造函数上约束参数多态类型吗?

我有一个参数化类型,我想将其限制为数字类型,更具体地说是 a Fractional,例如:

这样 API 的用户可以定义他们可能使用的非整数类型(FloatDouble?),但我编写的内部 API 代码仍然可以对数字类型执行算术运算。我不希望它是整数,因为我的“内部操作”的结果可能不是整数,我的理解是使用Fractional会导致更准确的结果。

编译上述(至少在 GHCI 中)会给我以下错误:

这表明我正在做一些我可能不想继续尝试的事情;即我的设计是垃圾。

我想我想在这个 API 中说以下内容:“当您使用 Rating 类型时,它的参数必须是的子类,Fractional以便我可以对其执行准确的算术运算”。我怎样才能做到这一点?还是我离题和/或过度设计?

0 投票
2 回答
437 浏览

haskell - Haskell 中的抽象数据类型与参数多态性

我试图掌握这两个概念之间的关系。

首先考虑一个抽象数据类型的例子:

根据 Haskell 维基:

这种类型是抽象的,因为它未定义其结构的某些方面,由数据类型的用户提供。这是抽象数据类型的弱形式。资源

现在考虑参数多态性的概念:

参数多态性是指当一个值的类型包含一个或多个(无约束的)类型变量时,该值可以采用通过用具体类型替换这些变量而产生的任何类型。--来源

这里id :: a -> a给出了一个例子:

例如,函数id :: a -> a在其类型中包含一个不受约束的类型变量 a

问题:这两个概念之间的形式关系是什么?特别是,抽象数据类型的所有实例也是参数多态性的实例吗?反过来呢?

0 投票
2 回答
1863 浏览

c++ - 为什么说 C++ 不支持参数多态?

根据参数多态性的维基百科页面:

类型多态性的一些实现表面上类似于参数多态性,同时也引入了特殊方面。一个例子是 C++ 模板特化。

问题:为什么说 C++ 只实现与参数化多态性表面上相似的东西?特别是,模板不是参数多态性的一个例子吗?

0 投票
2 回答
3548 浏览

haskell - 在 Haskell 中,“高级类型”*真的*类型吗?或者它们仅仅表示*具体*类型的集合,仅此而已?

参数化多态函数

考虑以下函数:

我们可以说fis的类型a -> Intf因此它是“多态”类型。

以下哪项是最准确的思考方式f

  1. 实际上有一个 ftype a -> Int。但是,它可以用作 、f :: Int -> Intf :: Double -> Int

  2. 从字面上看,类型f是 NOT a -> Int。实际上,这只是一种简写方式,即存在一个类型为具体的函数f(即,有 an f :: Int -> Int、anf :: Double -> Double等;此外,这些函数中的每一个都彼此不同)。

高等类型

同样,我们可以考虑以下类型声明:

并问两种观点哪个更正确:

  1. 没有单一类型Maybe;实际上,只有一个具体类型的族(Maybe IntMaybe String等),仅此而已。

  2. 实际上只有一种类型Maybe。这种类型是更高种类的类型。当我们说它是“类型”时,我们的意思是字面意思(不是 (1) 的简写)。碰巧我们也可以编写Maybe Int,Maybe Double等来生成不同的类型(它们恰好是具体的)。但是,归根结底(即):MaybeMaybe IntMaybe String表示三种不同的类型,其中两种是具体的,另一种是高级的。

问题摘要

在 Haskell 中,“高级类型”真的是类型吗?或者只是具体类型是“真正的类型”,当我们谈到“高级类型”时,我们只是表示一个具体类型的。此外,参数化多态函数是表示单一类型的函数,还是表示具体类型的集合函数(仅此而已)?

0 投票
1 回答
273 浏览

java - Java ClassCastException 从通用实例“new ClazzXXX”中获取 ParameterizedType E()"

下面我粘贴了我想运行的示例。

我可以很容易地得到一个StringHome实例的泛型类 extends Home<String>,但我不能对new Home<String>()实例做同样的事情。我怎样才能获得它?

我的目标是使mainKO方法正常工作mainOK

这个类的执行打印出这个: