C# and Java optionals aren't very useful, since they would be reference types themselves, and thus could be null!
I would submit Rust and Swift as "decent" type systems, if Haskell is the standard for "good". They do nullability correctly, but lack HKTs.