gpt4 book ai didi

scala - 什么是类型,什么是 scala 中的类型构造函数

转载 作者:行者123 更新时间:2023-12-03 21:24:59 26 4
gpt4 key购买 nike

我对理解 type 的内容有点困惑在 scala方法。

在文件中我读到 List[Int]是一个类型,List 是一个类型构造函数。

但是什么关键字type意味着当我写以下内容时?

val ls: scala.collection.immutable.List.type = scala.collection.immutable.List

以及如何 typetype 相关例如,可以将其定义为特征中的字段。

最佳答案

在 Scala val像上面这样的赋值:

val name: Tpe = expression
Tpe是标识符的类型 name .因此:
val x: List.type = List
List 的类型对象(又名列表模块或列表伴侣)是 List.type .这表明它是一个单例。所有这些都与类型论中的类型构造函数的概念完全正交。

类型构造函数

在类型论中, List (注意:不是同伴)既是类型(表示为 * )又是类型构造函数(表示为 * -> * ),因为当您向 List 提供类型参数时(例如 Int)然后你有一个类型(即 List[Int] )。 Scala 为这种构造提供了语法。例如:
def foo[F[_]]: F[Int]
^^^^ ^^^
| + supply a type argument to F[_]
|
+ the type constructor F[_]

但是,除非您对 F 有更多了解,否则您无法真正实现这种方法。 .例如,如果存在隐式 scalaz.Monad[F] ,您可以使用 Monad.pure构建您的 F[Int] 的值(value)像这样:
def foo[F[_]: Monad]: F[Int] = Monad[F].pure(1)

在斯卡拉

Scala 确实让你绕过 List作为类型构造函数作为此类方法的类型参数。例如:
scala> def foo[F[_]]: F[Int] = ???
foo: [F[_]]=> F[Int]

scala> lazy val x = foo[List]
x: List[Int] = <lazy>

然而 List您在 foo[List] 中提供不是同伴

注意 foo 的声明将导致以下警告:
<console>:11: warning: higher-kinded type should be enabled
by making the implicit value scala.language.higherKinds visible.
This can be achieved by adding the import clause 'import
scala.language.higherKinds'
or by setting the compiler option -language:higherKinds.
See the Scaladoc for value scala.language.higherKinds for a discussion
why the feature should be explicitly enabled.
def foo[F[_]]: F[Int] = ???
^

关于scala - 什么是类型,什么是 scala 中的类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45300288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com