【发布时间】:2013-12-02 09:07:24
【问题描述】:
鉴于此代码 sn-p:
someFunction x = print x `seq` 1
main = do print (someFunction "test")
为什么在执行代码时print x 不打印test?
$./seq_test
1
如果我用 error 替换它,我可以检查 seq 的左操作数 确实被评估了。
我怎样才能达到我的预期输出:
test
1
只修改someFunction?
【问题讨论】:
-
评估一个 IO 操作与执行它不同。没有任何方法可以让 someFunction 做你想做的事,因为如果你想在其中使用
print,它必须在 IO monad 中,你将无法打印它的结果(不修改 main )。 -
我想知道为什么投反对票?我相信我的问题是一个完全有效的问题。