How to use Json.Decode to create custom decoders, for example decoding into union types and user defined data types