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/