Про варианты тут хорошо описано
https://dev.realworldocaml.org/variants.htmlЭто как обычные варианты (tagged union types), только вместо явного типа - структурная типизация.
Позволяет в разных местах программы объявлять варианты,
а потом где-то в корне паттерн матчить - и все типы должны сойтись (или не скомпилится)