gpt4 book ai didi

scala - Scala 和 Haskell 中的高级类型

转载 作者:行者123 更新时间:2023-12-04 17:18:35 24 4
gpt4 key购买 nike

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/

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