缺少严格的东西

时间:2012-09-12 20:01:01

标签: haskell strictness

我有这段代码:

divisors n = 1:[y|y<-[2..(n `div` 2)], n `mod` y == 0]

writeList l = do print "Start"
                 print l

然后,我想用严格的参数调用函数;我试过了:

writeList $! (divisors 12345678)

(divisors 12345678) \`seq\` (writeList (divisors 12345678))

但它的行为并不像是有严格的论据:即在“开始”之后我必须等待(divisors 12345678)

的评估

我错过了什么?

1 个答案:

答案 0 :(得分:1)

seq(或$!)仅针对第一个头部普通表单(您的案例中为(:)构造函数)进行评估,您可以使用deepseq(或$!! )用于评估正常形式。