This is a frequent mistake. When you say type Baz = Foo | Bar you are not creating a union type with type Foo and Bar inside but a tag Foo and a tag Bar. These two are values for the Baz.
In order to create a union that contains the type you need type Baz = FooTag Foo | BarTag Bar and then match with
case baz of
FooTag foo ->
case foo of
OneFoo ->
...