问题标签 [kind-projector]

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 回答
129 浏览

scala - kind-projector 返回奇怪的结果

我有这些类型: SomeTypeClass
一种高级类型,它有一个类型参数 * => * => *

Target它接受三个类型参数:
类型构造函数F[_]和两个多态类型A, B

我想实现 Target 的 SomeTypeClass 的一个实例。
我正在使用 kind-projector 插件来创建部分应用的类型。
我想要的方法签名应该是:

我尝试使用两个星形参数使用此语法:

但是F[_]在实例级别F[_]声明的会影响在测试方法中声明的(我希望它们是相同的 F),所以我已经转向 λ 语法并得到了两个不同的不需要的结果。

第一个使用λ[(F, A, B) => Target[F, A, B]]生成的pab参数, pab: Target[A, B, B]而不是pab: Target[F, A, B]和返回类型Target[S, T, B]而不是Target[F, S, T]

第二个在三重类型 lambda 参数末尾使用 F (为什么???)
λ[(A, B, F) => Target[F, A, B]]为参数和返回类型生成了正确pab的类型,但是对于每个隐式参数,类型Strong[λ[(A, B, F) => Target[F, A, B]]]而不是 Strong[Target[F, *, *]]]

完整代码:

我可以使用这个插件实现所需的语法吗?
为什么插件会为 lambda 类型的“参数”的不同顺序生成不同的类型?

0 投票
1 回答
38 浏览

scala - 类型参数子句中的广义约束?

SLS 将类型参数子句的语法指定为

我们在类型参数子句中看到 >:, <:, <%, <%,:作为允许的保留名称。有没有一种方法可以在类型参数子句中使用广义类型约束符号名称<:<=:=使得

会扩大到

类似于上下文绑定的方式

扩展到

0 投票
1 回答
565 浏览

scala - 类型参数中 *(星号)和 _(下划线)之间的区别

这里有人说星号是 scala 3 的下划线,但我在 scala 2.13 中看到过这样的代码:

它是否具有相同的含义,只是指定 * 中的类型与 _ 中的类型不同?

0 投票
1 回答
71 浏览

scala - 阐明 Scala 中的跨版本行为

我想知道这两者之间有什么区别:

我的理解是cross CrossVersion.full将完整的 Scala 版本添加到库中,例如

%%添加了 Scala 二进制版本,例如

因此,我不明白为什么我们需要cross CrossVersion.full同时使用%%%。有什么不同?

0 投票
1 回答
36 浏览

scala - scala 猫应用程序无法编译

我尝试关注https://typelevel.org/cats/typeclasses/applicative.html

它无法编译并出现错误:

未找到:类型 * 隐式 def applicativeForEither[L]: Applicative[Either[L, *]] = new Applicative[Either[L, *]] {

在 cat 中,它使用 '?' 而不是'*'(例如EitherTFunctor),但当我复制粘贴它时它也无法编译。

我应该怎么做才能修复它?