diff options
| author | Akshay Nair <phenax5@gmail.com> | 2023-08-10 18:18:46 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2023-08-10 18:18:46 +0530 |
| commit | db97b1a9c42fe945ca37256f5ee18d52c6aa32b4 (patch) | |
| tree | 1da3da4a99192be8ad10b2931d447c2cc3f45036 /src/utils/adt.ts | |
| parent | 6a04167058b59b54b183104a1cf1b1b2cf8d7e9a (diff) | |
| download | css-everything-db97b1a9c42fe945ca37256f5ee18d52c6aa32b4.tar.gz css-everything-db97b1a9c42fe945ca37256f5ee18d52c6aa32b4.zip | |
feat: adds parser for simple expressions
Diffstat (limited to 'src/utils/adt.ts')
| -rw-r--r-- | src/utils/adt.ts | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/utils/adt.ts b/src/utils/adt.ts index c19398b..e9a6c51 100644 --- a/src/utils/adt.ts +++ b/src/utils/adt.ts @@ -1,11 +1,9 @@ type TagValue<T, N> = T extends Tag<N, infer V> ? V : never export const match = - <R, T extends Tag<string, any>>(pattern: { + <R, T extends Tag<string, any>>(tag: T, pattern: { [key in T['tag'] | '_']?: (v: TagValue<T, key>) => R - }) => - (tag: T): R => - ((pattern as any)[tag.tag] || (pattern._ as any))(tag.value) + }): R => ((pattern as any)[tag.tag] || (pattern._ as any))(tag.value) type Tag<N, V> = { tag: N; value: V } export type Enum<T> = { [N in keyof T]: Tag<N, T[N]> }[keyof T] |
