短絡

&& は特殊構文か何かだと思ってた。普通に再定義できるとは…。

# false && raise Exit;;
- : bool = false
# let (&&) = (&&);;
val ( && ) : bool -> bool -> bool = <fun>
# false && raise Exit;;
Exception: Pervasives.Exit.

括弧は結合を変えるだけじゃないみたい。

#  (&&) false  (raise Exit);;
- : bool = false
# ((&&) false) (raise Exit);;
Exception: Pervasives.Exit.