Работа с базовым типом не должна зависеть от конкретного наследника, разве нет? Т.е. если ты пишешь логику для базового типа, где тебе явно нужно узнать тип наследника, то ты...
В F# можно развернуть размеченное объединение без дополнительной переменной "code"? StateCode = StateCode of string
Есть ссылка на чатик фарша?