Я имел в виду не ffi, а работу с adt пурскрипта из js, например. Нельзя реализовать нормальный интероп, если передавать в ffi-функции можно только примитивные типы. Можно, конечно, конструкторы передавать в ffi-вызовы, но если нужно pattern matching на стороне js, то уже беда.
Конструкторы можно передавать, и нужно. Где-то они эти даже явно советовали.
Матчить в JS по ADT, да, не удобно т.к. в JS нет паттерн матчинга по ADT. 🙃
Можно делать instanceof, как компилятор делает, но это, наверное может и поменяться.
Я бы просто избегал паттерн матчинга на стороне JS.