scala - Scala 和 Haskell 中的高级类型

标签 scala haskell higher-kinded-types

Data.Foldable显示以下代数数据类型:
data Tree a = Empty | Leaf a | Node (Tree a) a (Tree a)
它的 kind* -> * .它需要一个 a类型。

Prelude> :k Tree
Tree :: * -> *

现在让我们看看 trait Foldable[_] ,来自 Functional Programming in Scala 的 Scala 的“高级类型” :
trait Foldable[F[_]] {
  def foldRight[A,B](as: F[A])(z: B)(f: (A,B) => B): B
  ...
}

优秀的书说:

Just like values and functions have types, types and type constructors have kinds. Scala uses kinds to track how many type arguments a type constructor takes, ...



编辑

指定 trait Foldable[F[_]] 时, F[_]总是表示更高级的类型? F[_]可以吗?是别的什么?会不会是类型 - F[A] ?

最佳答案

F[_]在 Scala 中代表类似 * -> * 的东西在 Haskell 中:这是一种“接收”具体类型(Scala 中的 _ 和 Haskell 中的第一个 *)并返回一个新的具体类型( F[A] 对于某些具体类型 A 和具体“容器”F 在 Scala 中)。

是的,F[_]代表一些更高级的类型,如 List[_]Option[_] .在像 trait Foldable[A,F[A]] 这样的 scala 中定义可遍历是没有用的因为我们会说 Foldable需要用折叠的特定东西来定义( A )。

关于scala - Scala 和 Haskell 中的高级类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867177/

相关文章:

scala - scala中的 "not a simple type"警告是什么意思?

Scala 检查映射中的值

scala - pureconfig 无需手动导入 pureconfig.generic.auto._

scala - 如何防止这种错误-模式匹配和Nil

java - Java中的高级泛型

haskell - 保存并传递先前结果的映射

haskell - Aeson 中的单标签构造函数

haskell - "cabal install happy"导致内存溢出。 (GHC 7.8.2)

java - 我可以在 Java 中使用嵌套泛型(又名高等类型)吗?

Scala 高级类型和协变