Yes, it does have variant types and pattern matching, and an option type in the standard library, just like ML.
Contrary to ML, it doesn't require variables to be initialized when declared. The typestate system checks (statically) that they are not referenced before initialized.