这里有两个等价的偏函数:
\True -> \() -> ()\True () -> ()
应用任何一个都False应该引发PatternMatchFail异常。
当我使用Control.Exception.evaluate强制从前者到 WHNF 的 thunk 时,它会强制PatternMatchFail异常:
ghci> _ <- evaluate $ (\True -> \() -> ()) False
*** Exception: <interactive>:10:18-35: Non-exhaustive patterns in lambda
当我使用后一种形式时,它不会:
ghci> _ <- evaluate $ (\True () -> ()) False
为什么不?
(在 GHC-8.0.1 上)