diff options
Diffstat (limited to 'src/utils')
| -rw-r--r-- | src/utils/adt.ts | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/utils/adt.ts b/src/utils/adt.ts index 45d9e50..3ae387c 100644 --- a/src/utils/adt.ts +++ b/src/utils/adt.ts @@ -7,6 +7,28 @@ export const match = <R, T extends Tag<string, any>>( }, ): R => ((pattern as any)[tag.tag] || (pattern._ as any))(tag.value) +// type TagValues< +// T extends Tag<any, string>, +// Keys extends Array<string>, +// Values extends Array<any> = [], +// > = Keys extends [] +// ? Values +// : Keys extends [ +// infer key extends string, +// ...infer restOfKeys extends string[], +// ] +// ? TagValues<T, restOfKeys, [...Values, TagValue<T, key>]> +// : never +// +// export const ifLet = <T extends Tag<string, any>, Keys extends Array<T['tag']>>( +// tag: T, +// kinds: Keys, +// cb: (...values: TagValues<T, Keys>) => void, +// ): void => { +// const values = kinds.map(k => (tag.tag === k ? tag.value : undefined)) +// ;(cb as any)(...values) +// } + export const matchString = <R, T extends string = string>( key: T, pattern: { |
