diff --git a/packages/fabric/core/src/variant/match.ts b/packages/fabric/core/src/variant/match.ts index e4f6932..5d14799 100644 --- a/packages/fabric/core/src/variant/match.ts +++ b/packages/fabric/core/src/variant/match.ts @@ -1,17 +1,21 @@ import { Fn } from "../types/fn.js"; import { TaggedVariant, VariantFromTag, VariantTag } from "./variant.js"; -export type VariantMatcher> = { - [K in TVariant[VariantTag]]: Fn>; +export type VariantMatcher, T> = { + [K in TVariant[VariantTag]]: Fn, T>; }; export function match>( v: TVariant, ) { return { - case>( - cases: TMatcher, - ): ReturnType { + case< + const TReturnType, + const TMatcher extends VariantMatcher< + TVariant, + TReturnType + > = VariantMatcher, + >(cases: TMatcher): TReturnType { if (!(v[VariantTag] in cases)) { throw new Error("Non-exhaustive pattern match"); }