在教程What I Wish I Knew When Learning Haskell中,GHCi内部存在关于使用:sprint
命令检查某些变量的评估状态的这种交互:
λ: let a = [1..] :: [Integer]
λ: :sprint a
a = _
λ: a !! 4
5
λ: :sprint a
a = 1 : 2 : 3 : 4 : 5 : _
但是,如果我们从:: [Integer]
的定义中省略了a
部分,则对:sprint a
的最后一次调用将返回a = _
而不是a = 1 : 2 : 3 : 4 : 5 : _
。< / p>
为什么?
ANSWER :必须通过:set -XMonomorphismRestriction
和:set -XNoMonomorphismRestriction
在GHCi内打开/关闭单态限制(请参阅下面的Reid Barton评论)。我发现:sprint
行为的最佳解释是here。