Applicative Programming, Disjoint Unions, Semigroups and Non-breaking Error Handling