Questions tagged «higher-kinded-types»

5
Scala中什么是更高种类的类型?
您可以在网上找到以下内容: 更高种类的类型==类型构造函数? class AClass[T]{...} // For example, class List[T] 有人说这是一种更高种类的类型,因为它抽象了符合该定义的类型。 较高种类的类型是采用其他类型并构造新类型的类型 这些虽然也称为类型构造函数。(例如,在Scala编程中)。 更高种类的类型==类型构造函数,它将类型构造函数作为类型参数? 在高级类属的论文中,您可以阅读 ...在类型上进行抽象的类型,在类型上进行抽象(“高级类型”)...” 这表明 class XClass[M[T]]{...} // or trait YTrait[N[_]]{...} // e.g. trait Functor[F[_]] 是一种较高的类型。 因此,考虑到这一点,很难区分类型构造函数,更高种类的类型和将类型构造函数作为类型参数的类型构造函数,因此存在上述问题。

5
更高种类的类型什么时候有用?
我从事F#开发工作已有一段时间了,我喜欢它。但是我知道在F#中不存在的一个流行词是类型较高的类型。我已经阅读了有关高类型类型的材料,我想我理解它们的定义。我只是不确定为什么它们有用。有人可以提供一些示例,说明在Scala或Haskell中哪种类型更高级的类型更容易,而这需要F#中的解决方法?同样对于这些示例,如果没有更高类型的类型(或者在F#中反之亦然),解决方法将是什么?也许我只是很习惯解决它,以至于我没有注意到该功能的缺失。 (我认为)我得到了替代myList |> List.map f或myList |> Seq.map f |> Seq.toList更高种类的类型,使您可以简单地编写myList |> map f并返回List。很好(假设是正确的),但是看起来有点小?(难道不能简单地通过允许函数重载来完成吗?)我通常Seq无论如何都会转换为,然后我可以转换为以后想要的任何东西。再说一次,也许我只是太习惯了。但是,有没有在那里,kinded更高类型的任何例子真的可以节省你无论是在击键或类型安全?

2
为什么`std :: mem :: drop`与排名较高的特征范围中的闭包| _ |()不完全相同?
的实现std::mem::drop记录如下: pub fn drop<T>(_x: T) { } 因此,我希望该封盖|_| ()(俗称马桶盖)drop在两个方向上都可以按1:1的比例替换。但是,下面的代码显示drop与该函数的参数上绑定的较高特级特征不兼容,而马桶盖则兼容。 fn foo<F, T>(f: F, x: T) where for<'a> F: FnOnce(&'a T), { dbg!(f(&x)); } fn main() { foo(|_| (), "toilet closure"); // this compiles foo(drop, "drop"); // this does not! } 编译器的错误信息: error[E0631]: type mismatch in function arguments --> src/main.rs:10:5 | …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.