Creating a Flexible Discriminated Union Schema with Type Narrowing - Effect Community