Connected to [crocodealer/#9](https://github.com/kowainik/crocodealer/pull/9).
Since the `prism` approach for sum types works with single non-nested values, a new combinator is needed to handle sum types, similar to dimap but accounting for the fact that the value may not be there ( doesn't have the right constructor we need ). So a combinator `disum` could be added to handle that with a type of:
:: (c -> Maybe d) -- ^ Mapper for consumer
-> (a -> b) -- ^ Mapper for producer
-> Codec r w d a -- ^ Source 'Codec' object
-> Codec r w c b -- ^ Target 'Codec' object
It's implemented in the pull request above but it would be better here. I'm willing to contribute it.