4 ms·
The former is a (small) generalization of the latter, tacking on a tag to forcibly ensure the sets are disjoint. It's not worth thinking of them as different.
by dbaupp 9y ago
The former is a (small) generalization of the latter, tacking on a tag to forcibly ensure the sets are disjoint. It's not worth thinking of them as different.
In any case, Flow doesn't require that the sides of the | are different.
- catnaroek 9y agoUm, re-read the documentation: > These disjoint unions are made up of any number of object types which are each tagged by a single property. It is clearly a disjoint union in the set-theoretical, not category-theoretical sense. Let's see their own example: // @flow type Success = { success: true, value: boolean }; type Failed = { success: false, error: string }; type Response = Success | Failed; function handleResponse(response: Response) { if (response.success) { var value: boolean = response.value; // Works! } else { var error: string = response.error; // Works! } } Clearly, this union is disjoint because the types `Success` and `Failed` were a priori known to be disjoint.