问题标签 [higher-kinded-types]

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 投票
1 回答
919 浏览

scala - Scala:类型推断和子类型/更高种类的类型

我一直在和 Scalaz 一起玩,以便在 scala 中获得一点haskell 的感觉。为了理解 scala 中的工作原理,我开始自己实现各种代数结构,并遇到了 Scalaz 人提到的一种行为。

这是我实现仿函数的示例代码:

我为 Option 和一个虚假的 sumtype Foo 编写了一个仿函数实例。问题是 scala 无法在没有显式类型注释或包装方法的情况下推断隐式参数

Scala 在没有这些变通方法的情况下推断出 Functor[Bar] 和 Functor[Some] 之类的类型。

这是为什么?任何人都可以请我指出定义此行为的语言规范中的部分吗?

问候, raichoo

0 投票
1 回答
160 浏览

scala - 概括收集方法

如果我想将以下方法推广到支持所有必要操作(、、、和)的所有集合类型,foldLeft那么我flatMap该怎么做?目前它只适用于列表。map:+

代码:

0 投票
5 回答
3062 浏览

scala - 部分应用类型参数

我正在拼命尝试解决以下问题:

scalac 只是说:"error: illegal cyclic reference involving trait CList"。我怎样才能使这个编译?

0 投票
2 回答
1730 浏览

scala - 具有更高种类类型的上下文边界快捷方式

是否可以将上下文边界语法快捷方式用于更高种类的类型?

0 投票
2 回答
702 浏览

generics - 高阶多态性 + 值类型

我在某处读到高阶多态性不能在具有值类型的类型系统(如.NET)中使用/实现。对吗?为什么?

0 投票
2 回答
410 浏览

scala - 在 Scala 中,为什么我不能使用为类型构造函数绑定的上下文?

可能重复:
具有更高种类类型的上下文边界快捷方式

为什么 Scala 编译器不让我写这个?

它抱怨“错误:类型 M 采用类型参数”。如果我只要求 ,ClassManifest无论参数化M是什么,编译器都应该能够插入它,不是吗?

这按预期工作:

0 投票
1 回答
780 浏览

scala - Scala 中的方法级高级类型

我刚刚开始在 Scala 中使用更高级的类型,并且遇到了我不理解的行为。我在 Scala 2.9.0.1 的 REPL 中完成了所有这些工作。

首先,我创建了一个映射器特征,以便我可以映射任何类型 M 的元素:

这是我的映射器实现:

但是REPL抱怨......

如果我将 M[_] 的声明移动到类级别,则此代码可以正常工作:

为什么会这样?如果 Scala 位于类级别,为什么 Scala 可以为 M 找出正确的类型,但在方法级别却失败了?

谢谢!

0 投票
5 回答
73358 浏览

scala - Scala 中的高级类型是什么?

您可以在网上找到以下内容:

  1. 高级类型 == 类型构造函数?

    有人说这是一种高级类型,因为它抽象了符合定义的类型。

    更高种类的类型是采用其他类型并构造新类型的类型

    这些虽然也称为类型构造函数。(例如,在Programming in Scala 中)。

  2. 更高种类的类型 == 类型构造函数,它将类型构造函数作为类型参数?

    在论文Generics of a Higher Kind中,您可以阅读

    ...抽象类型之上的类型('高级类型')......”

    这表明

    是高种类型。

因此,考虑到这一点,很难区分类型构造函数更高种类的类型以类型构造函数作为类型参数的类型构造函数,因此上面的问题。

0 投票
5 回答
2156 浏览

scala - 是否可以在 Scala 中“咖喱”更高种类的类型?

假设我有一个带有两个类型参数的特征,例如

和另一个具有更高类型参数的特征,例如

我希望能够将一个固定值替换为 的类型参数之一Qux,以便它可以用于参数化Turkle

这是一个示例(在 Scala 中没有意义的代码!):

任何人有任何想法如何实现这种效果?

0 投票
2 回答
414 浏览

haskell - 在 Haskell 中通过整数参数化类型

我正在尝试制作一些 Haskell 类型,这些类型不是按类型而是按类型的元素(特别是整数)进行参数化。例如,R^2 中的(线性代数)向量和 R^3 中的向量是不同类型的对象。具体来说,我正在用 Haskell 编写一个 KD 树,我想用一个正整数参数化我的数据结构,因此 3-D 树和 4-D 树具有不同的类型。

我试图通过元组参数化我的树,但它似乎没有去任何地方(而且这似乎不太可能被推动,特别是因为看起来三元组或更大的东西甚至不是函子(和我不知道如何说,例如 HomogeneousTuple a => Functor a)。我想做这样的事情:

那会很好,或者类似的东西同样好

有人知道这些效果中的任何一个是否可行或合理吗?

谢谢-约瑟夫