ExtCore
ExtCore copied to clipboard
ping pong in documentation of == and ===
== refers to obsolete use ===
=== refers to obsolete use ==
https://github.com/jack-pappas/ExtCore/blob/master/ExtCore/Pervasive.fs#L105-L113
Thank you for bringing this up. You're right, it should be fixed.
Background context: I think I originally used === for the physical equality (aka reference equality) operator, but later introduced == because that's what OCaml's Pervasives module uses and I thought it might be more familiar for anyone switching between F# and OCaml.
However, I failed to consider whether == would be confusing for C# developers getting into F#. After speaking to a developer at work who ran into that exact issue (== vs. =), I realized the C# -> F# scenario is much more likely and having an auto-imported == operator means that:
- Devs used to working in C# can use
==and won't get a syntax error telling them they should be using=instead. - If comparing two reference-typed things (e.g. F# records or DUs), accidentally using
==instead of=means the program will compile but will almost certainly not have the expected behavior.
I think the solution here is to make a breaking change in ExtCore 1.0 to remove the == operator and un-deprecate ===. It'll eliminate confusion for developers new to F# and it'll fix this circular-deprecation issue as well. If we need to preserve the == operator, I think it's probably best to move it over to the FSharp.Compatibility.OCaml project under fsprojects/FSharp.Compatibility.
From what I can see it's already implemented in ocaml compatibility https://github.com/fsprojects/FSharp.Compatibility/blob/master/FSharp.Compatibility.OCaml/Pervasives.fs#L53-L59
/// e1 == e2 tests for physical equality of e1 and e2.
let inline ( == ) x y =
LanguagePrimitives.PhysicalEquality x y
/// Negation of (==).
let inline ( != ) x y =
not <| LanguagePrimitives.PhysicalEquality x y