我很确定他们不一样.然而,我陷入了困境
据我所知, rust 有are种更高级的类型,至少是最基本的类型.使用"*"符号,HKT的确有一种类型,例如* -> *
.
data Maybe a = Just a | Nothing
在这里
-
Maybe
是类型构造函数,需要应用于具体类型 -
Just a
和Nothing
是数据构造函数.
在关于哈斯凯尔的教科书中,这经常被用作更高级类型的例子.然而,在Rust中,它可以简单地实现为一个枚举,它毕竟是一个sum type:
enum Maybe<T> {
Just(T),
Nothing,
}
区别在哪里?据我所知,这是一个
- 如果在哈斯凯尔,这被用作HKTs的教科书示例,为什么
- 应该说 rust 不支持HKT吗?
- HKT和参数多态性的根本区别是什么?
当我看函数时,这种困惑还在继续,我可以写一个参数化的
fn do_something<T>(input: Maybe<T>) {
// implementation
}
再说一次,在哈斯凯尔,这大概是
do_something :: Maybe a -> ()
do_something :: Maybe a -> ()
do_something _ = ()
这就引出了第四个问题.
- 对更高级类型的支持到底在哪里结束?有什么问题
Related Questions:
我看了很多与这个话题相关的问题(包括他们与博客帖子的链接等),但我找不到我主要问题(1和2)的答案.
- 100
- 100
- 100
- 100
- 100
Update
谢谢你给出了很多很好的答案,这些答案都非常详细,帮助很大.我决定接受安德烈亚斯·罗斯伯格的回答,因为他的解释最有助于我走上正轨.特别是关于术语的部分.
我真的陷入了这样一个循环,认为所有的* -> * ... -> *
都是higher-kinded.强调* -> * -> *
和(* -> *) -> *
之间区别的解释对我来说至关重要.