【发布时间】:2014-02-03 01:41:02
【问题描述】:
我想知道为什么:sprint 在这种情况下会报告xs = _:
Prelude> xs = map (+1) [1..10]
Prelude> length xs
10
Prelude> :sprint xs
xs = _
但在这种情况下不是:
Prelude> xs = map (+1) [1..10] :: [Int]
Prelude> length xs
10
Prelude> :sprint xs
xs = [_,_,_,_,_,_,_,_,_,_]
注意:我正在运行 ghci 和 -XNoMonomorphismRestriction。这是否与xs 的类型在第一种情况下是多态的但在第二种情况下无关这一事实有关?我想知道内部发生了什么。
【问题讨论】:
-
这正是单态限制旨在防止的那种混淆,所以你应该绝对阅读wiki page on it。
标签: haskell ghci thunk monomorphism-restriction