繁体   English   中英

记录没有无限类型错误

[英]No infinite type error for records

为什么当我在 Haskell (GHC) 中定义这样的东西时,没有列表样式的无限类型错误?

data Broken = Broken { title :: String,
                       loop  :: Broken }

它编译时没有类型错误,但显然它是一种无法使用的类型:我必须定义

foo = Broken "one" (Broken "two" (Broken "three" ...

没有任何问题。 完全可以定义该类型的值:

foo = Broken "one" foo

基本上这与定义一个没有 nil 值的列表类型是一样的(这也是完全合法的)。 完全可以定义该类型的值,但所有这些值都必须是无限的。

如果你定义

type Foo = (String, Foo)

然后你应该得到这个错误: Cycle in type synonym declarations

但是如果你定义

data Foo = Foo String Foo

你没有这样的错误。

练习:解释这两种情况的区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM