文字列ではなく、一部の型の等価比較のようです。
# 3 != 3;;
- : bool = false
# 3 != 2;;
- : bool = true
これは予想通りです。
# "odp" = "odp";;
- : bool = true
# "odp" != "odp";;
- : bool = true
# "odp" <> "odp";;
- : bool = false
"odp" != "odp"
が評価されるのはなぜtrue
ですか? それは実際に何をしているのですか?型エラーを生成するべきではありませんか?