C++17 has std::variant<> and it's ubiquitous in my code. Catching your type errors at compilation time is something you don't have to give up any more after doing your prototyping in Haskell.
See struct visitors in https://github.com/llvm/llvm-project/blob/main/flang/include...