在case
表达式中,例如:
case b of True -> 17
False -> 18
会出现任何懒惰:
case b of True -> 17
_ -> 18
即。使用_
模式而不是False
?
如果Bool
没有懒惰,那么情况也是如此:
data Three = One|Two|Three
case x of One -> 17
_ -> 18
答案 0 :(得分:3)
没有。 b
被评估为WHNF以检查使用了哪个Bool
构造函数。那时,没有什么可以评估的。
答案 1 :(得分:2)
不,这个案例表达式会评估b,但当然只有 if 一个表达式,其中包含的表达式本身就会被评估。
例如,在
中(42, case b of { True -> 43; False -> 41})
在元组的第二个元素为。之前,不会评估b
一般来说,如果以前的模式需要评估值,那么无可辩驳的模式不会增加懒惰 - 请记住,案例模式按照给定的顺序严格按顺序进行尝试。由于没有像“无法估计”这样一个总是被评估的值,因此案例表达式仍在评估中。