Guide: complex data types

I'm not happy about the hand-waving around `cmp`, but I'm not sure how to get around it.
Well, it doesn't have to be generic, e.g. `enum OptionalInt { Value(int), Missing }`.