export interface Catamorphism { fold(...args: { [K in keyof Variants]: (value: Variants[K]) => C }): C; }