How to think about pattern matching vs. type-checking

Great clarification. I was wondering why this works, since on one hand there always are default values when a struct is defined, on the other hand they seem to be ignored in this pattern except for the struct field.