gpt4 book ai didi

haskell - Int 列表与 Int -> Int 列表相比,类型相同吗?

转载 作者:行者123 更新时间:2023-12-02 15:10:50 24 4
gpt4 key购买 nike

为什么这两个有相同的类型?

ghci> :k [Int]
[Int] :: *
ghci> :k [Int -> Int]
[Int -> Int] :: *

编辑每@ Gabriel Gonzalez很有帮助的评论。

我不太了解 kinds,因此我没有良好的基础来期望上述类型在 kind 上有所不同。

最佳答案

好吧,让我们检查一下。

Int :: *
[] :: * -> *

因此,当您将 Int 类型应用于 [] 类型构造函数时:

[] Int :: *

这只是另一种(合法的)书写方式

[Int] :: *

好吧,这个很容易理解。

Int :: *
(->) :: * -> * -> *
[] :: * -> *

(->) Int :: * -> *
(->) Int Int :: *

与以下内容相同

Int -> Int :: *

因此,根据与上述相同的推理,

[Int -> Int] :: *

但这里有一个 secret ..仔细看看 [] 的类型。

[] :: * -> *

这意味着将任何类型放入非 * 类型的列表中都会产生编译错误。当您确实向它提供某种*时,结果将始终具有某种*

您的困惑来自于没有将级别分开。很多很多不同的类型都有相同的类型。毕竟,kind * 或多或少意味着“这种类型可以有值”。 (有一些小的异常(exception),但它们是低级内部的东西,你必须非常努力才能看到​​。)如果你可以有一个类型的值,那么很有可能该类型具有 kind *.

关于haskell - Int 列表与 Int -> Int 列表相比,类型相同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24983642/

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