问题标签 [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 投票
3 回答
726 浏览

c++ - C++ 中的模板和高阶种类

我正在尝试编写一个函数,该函数采用两个具有相同包含类型的容器,例如两个std::vector<int>s 或 astd::list<int>和 a std::vector<int>。(但不是 astd::vector<int>和 a std::vector<double>!)

由于我不太确定应该如何完成,所以我决定先编写一个测试程序:


-std=c++11这段代码使用标志给了我以下 g++ 4.7 的编译时错误:

为什么编译器不能正确识别instance_wrapper为模板?

0 投票
2 回答
227 浏览

scala - 在类型系统的上下文中,什么是“种类”?

我已经阅读了维基百科的文章并搜索了明显的地方,但我被困住了。有人可以简单地告诉我 Kind 到底是什么吗?这有什么用途 ?

Scala 示例最受赞赏

0 投票
1 回答
374 浏览

scala - 在scala中为递归类型指定泛型的正确方法

当我需要从具有完全相同类型的类结果返回时(不允许变化),我在 scala 中使用递归类型。

在将此模式与其他结构集成时,我遇到了一些问题。

提供的例子:

给出错误输出

错误描述绝对清楚。

我应该如何指定类型边界以适应要求?


更新:

我需要隐藏类型信息。我可以只使用长度为 1 的列表来隐藏它。但是应该有等价的

我试过这种形式:

但收到此错误:

我很好奇如何模拟与列表相同的行为

0 投票
4 回答
2156 浏览

scala - `class A[_]` 有什么用?

符号的类型class A[_]def a[_](x: Any)具有无法在正文中引用的类型参数,因此我看不出它在哪里有用以及它编译的原因。如果尝试引用此类型参数,则会引发错误:

有人能告诉我这种类型在 Scala 中是否有用例吗?确切地说,我不是指类型参数中的存在类型或更高种类的类型,仅指[_]构成完整类型参数列表的那些小类型。

0 投票
1 回答
359 浏览

scala - Scala中更高种类/类型的益智游戏

当我遇到这个问题时,我正在尝试使用更高的种类和类型边界。我的用例是我希望能够使用 Request 的任何子类型或 Request 类型本身来参数化 GenericAction 实例。Action trait 使用默认类型的 Request 扩展 GenericAction trait(在这种情况下,只会生成 Request 的匿名实例)。

ActionBuilderBase 具有与子特征 ActionBuilder 和 ActionBuilder2 共享的实用方法。ActionBuilder 生成默认的 Action[A] 和 Request[A] 实例。

到目前为止一切都很好,但是当我尝试创建另一个扩展 ActionBuilderBase 具有 R 和 GenericAction 子类型的特征时(在这种情况下将创建 GenericAction 的匿名实例),它无法编译。我猜原因是在第一个 ActionBuilder 的情况下,请求类型已经被“填充”(因为 Action[A] 已经有一个请求类型 == Request),这与下面的示例不同。为了让这个例子起作用,我需要“填写”什么?

0 投票
1 回答
567 浏览

java - monad 的一般情况可以在 java 6 中表达吗?

monad 的一般情况可以在 Java 6 中表达吗?注意“一般情况”这个词——monad 的一般情况可能是不可表达的,尽管 monad 的许多特殊情况(即许多特定的 monad)是可以表达的。

这里的问题是(缺乏)Java 中的高级泛型;但是,我看到示例 Haskell 代码确实使用https://stackoverflow.com/a/877036/1123502(即public class Fix<F extends Fix<F>>)之类的方法移植到了 Java。

当然,非类型安全的实现(如使用 Object 和向下转换)并不有趣。

更新:有 2 个常见的 monad 定义:join-fmap 和 bind-return。尽管它们(在数学上)是等价的,但它们可能不是等价的,因为一种定义可以用 Java 表达,而另一种则不是(但是,在我看来,不等价的可能性不大)。所以我的问题涉及这两个定义。

底线:是否有人克服了所有障碍并在 Java 6 中编写了“一般情况”单子?或者,或者,请指出一篇论文,或一篇详尽的博客文章,或彻底解释为什么不可能。

0 投票
1 回答
423 浏览

scala - 使用更高种类的类型访问上下文边界的类型构造函数参数

是否可以在上下文绑定中访问更高种类的类型构造函数参数?我希望定义一个采用更高类型的特征,并具有一个返回构造函数参数实例的方法。

这失败了,编译器错误抱怨上下文边界不能有两个类型参数,但我找不到另一种访问类型构造函数参数的方法?

0 投票
1 回答
107 浏览

scala - 铸造“空心”更高种类的类型值以避免实例化

我发现自己看了一些 Scalawags#2 的录音,然后是关于类型擦除的部分,Dick Wall 指出反射最终会咬你的脚。

所以我在想一些我经常做的事情(我也看到了 Scala Collections 的实现)。假设我有一个带有序列化程序的系统,将系统作为类型参数:

现在有许多类型可以在没有值参数A的情况下构造序列化器,所以本质上系统类型参数是“空心的”。由于在我的示例中大量调用了序列化程序,因此我正在保存实例化:

知道这是正确的,但当然,asInstanceOf有难闻的气味。对这种方法有什么建议吗?让我补充两件事

  • 将类型参数从 trait 的构造函数移动Serializerread方法不是一种选择(有特定的序列化程序需要参数化的值参数S
  • 向 的类型构造函数参数添加方差Serializer不是一种选择
0 投票
2 回答
1179 浏览

scala - 值、类型、种类……作为一个无限序列?

我才刚刚开始熟悉种类的概念,所以如果我没有很好地提出我的问题,请耐心等待......

值有类型:

类型有种类:

种类有什么?

它们有同类、流派、品种或品种吗?

这个抽象序列能走多远?我们是因为词穷而停止,还是因为走得更远没有价值而停止?或者,也许是因为我们很快就达到了人类认知的极限,而无法将我们的头脑围绕在更高级别的种类上?

一个相关的问题:语言为我们提供了值构造函数(如 cons 运算符)来生成值。语言还为我们提供了类型构造函数,例如 (,) 或 [] 来创建类型。是否有任何语言公开种类构造函数来制作种类?

另一个我很好奇的极端情况:我们显然有一个没有值的类型,表示为⊥,称为“底部类型”。有没有类型没有类型:底部类型?

0 投票
4 回答
649 浏览

haskell - 这种类型有什么一般结构?

在之前破解某些东西时,我创建了以下代码:

Callback a表示一个处理一些数据并返回一个新的回调的函数,该回调应该用于下一个通知。可以说,一个基本上可以替换自身的回调。liftCallback只是将普通函数提升为我的类型,同时runCallback使用IORefa 将 a 转换Callback为简单函数。

该类型的一般结构是:

看起来这可能与范畴论中一些著名的数学结构同构。

但它是什么?它是一个单子还是什么?一个应用函子?一个转化的单子?甚至是箭?是否有类似 Hoogle 的搜索引擎可以让我搜索这样的一般模式?