布尔案例表达式中的惰性Haskell模式?

时间:2011-04-09 16:03:07

标签: haskell lazy-evaluation

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

2 个答案:

答案 0 :(得分:3)

没有。 b被评估为WHNF以检查使用了哪个Bool构造函数。那时,没有什么可以评估的。

答案 1 :(得分:2)

不,这个案例表达式会评估b,但当然只有 if 一个表达式,其中包含的表达式本身就会被评估。

例如,在

(42, case b of { True -> 43; False -> 41})
在元组的第二个元素为。

之前,不会评估

b

一般来说,如果以前的模式需要评估值,那么无可辩驳的模式不会增加懒惰 - 请记住,案例模式按照给定的顺序严格按顺序进行尝试。由于没有像“无法估计”这样一个总是被评估的值,因此案例表达式仍在评估中。