Variant types are usually constrained to a fixed set of constructors. There may be very rare cases where you still want to be able to add constructors to a variant type even after its initial type declaration. For this, we offer extensible variant types.
Definition and Usage
.. in the type declaration above defines an extensible variant
type t. The
+= operator is then used to add constructors to the given type.
Note: Don't forget the leading
type keyword when using the
Pattern Matching Caveats
Extensible variants are open-ended, so the compiler will not be able to exhaustively pattern match all available cases. You will always need to provide a default
_ case for every
Tips & Tricks
Fun fact: In ReScript, exceptions are actually extensible variants under the hood, so
exception UserError(string) is equivalent to
type exn += UserError(string). It's one of the very few use-case where extensible variants make sense.
We usually recommend sticking with common variants as much as possible to reap the benefits of exhaustive pattern matching.