问题标签 [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.
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 类型的“参数”的不同顺序生成不同的类型?
scala - 类型参数子句中的广义约束?
SLS 将类型参数子句的语法指定为
我们在类型参数子句中看到 >:
, <:
, <%
, <%
,:
作为允许的保留名称。有没有一种方法可以在类型参数子句中使用广义类型约束符号名称<:<
,=:=
使得
会扩大到
类似于上下文绑定的方式
扩展到
scala - 类型参数中 *(星号)和 _(下划线)之间的区别
这里有人说星号是 scala 3 的下划线,但我在 scala 2.13 中看到过这样的代码:
它是否具有相同的含义,只是指定 * 中的类型与 _ 中的类型不同?
scala - 阐明 Scala 中的跨版本行为
我想知道这两者之间有什么区别:
我的理解是cross CrossVersion.full
将完整的 Scala 版本添加到库中,例如
并%%
添加了 Scala 二进制版本,例如
因此,我不明白为什么我们需要cross CrossVersion.full
同时使用%
和%%
。有什么不同?
scala - scala 猫应用程序无法编译
我尝试关注https://typelevel.org/cats/typeclasses/applicative.html
它无法编译并出现错误:
未找到:类型 * 隐式 def applicativeForEither[L]: Applicative[Either[L, *]] = new Applicative[Either[L, *]] {
在 cat 中,它使用 '?' 而不是'*'(例如EitherTFunctor),但当我复制粘贴它时它也无法编译。
我应该怎么做才能修复它?