gpt4 book ai didi

haskell - type 和 newtype 的编译时间和运行时间差异

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

在读取-编译-运行管道的各个阶段,type 声明和 newtype 声明之间有什么区别?

我的假设是它们编译为相同的机器指令,唯一的区别是程序进行类型检查的时间,例如

type    Name  =   String
newtype Name_ = N String

您可以在需要 String 的任何地方使用 Name,但如果您使用 Name_ 其中 String 是预期的,即使它们编码相同的信息。

我问这个问题是因为,如果是这种情况,我看不出以下声明无效的任何理由:

type    List a  =    Either () (a, List a)
newtype List_ a = L (Either () (a, List_ a))

但是,类型检查器接受第二个,但拒绝第一个。这是为什么?

最佳答案

Luqui 的评论应该是一个答案。 Haskell 中的类型同义词首先近似不过是宏。也就是说,它们被类型检查器扩展为完全评估的类型。类型检查器无法处理无限类型,因此 Haskell 没有等递归类型。

newtypes 为您提供等递归类型,这些类型在 GHC 中本质上编译为核心语言中的等递归类型。 Haskell 不是 GHC 核心,因此您无权访问此类类型。对于类型检查器和人类来说,等递归类型都有点难以使用,而等递归类型具有相同的功能。

关于haskell - type 和 newtype 的编译时间和运行时间差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14811396/

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