diff options
| author | Akshay Nair <phenax5@gmail.com> | 2022-01-08 19:31:29 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2022-01-08 19:32:42 +0530 |
| commit | a9f13b737ba89f79409f12f0678b07d34b974ab1 (patch) | |
| tree | da86b7a47fd3a5ad3ed47da94d2861caced4a203 /src/eval/index.ts | |
| parent | d19a1e4e02c6743f057d03caa9337a5b47bfa9cd (diff) | |
| download | elxr-a9f13b737ba89f79409f12f0678b07d34b974ab1.tar.gz elxr-a9f13b737ba89f79409f12f0678b07d34b974ab1.zip | |
fix: fixes pattern matching type
Diffstat (limited to 'src/eval/index.ts')
| -rw-r--r-- | src/eval/index.ts | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/eval/index.ts b/src/eval/index.ts index e88b583..f80c04d 100644 --- a/src/eval/index.ts +++ b/src/eval/index.ts @@ -3,21 +3,22 @@ import { Expr, ListExpr } from '../types' import {match} from '../utils'; export const find = <T>([startO, exprs, endO]: ListExpr, list: T[]): any => { - const check = (e: Expr) => <T>(x: T, _i: number, _l: T[]): boolean => { + const check = (expr: Expr) => <T>(x: T, i: number, ls: T[]): boolean => { return pipe( - e.tag as any, - match({ - AnyItem: () => true, - AnyNumber: () => typeof x === 'number', - AnyString: () => typeof x === 'string', - AnyBool: () => typeof x === 'boolean', - Truthy: () => !!x, - Falsey: () => !x, - _: () => false, + expr, + match<boolean, Expr>({ + AnyItem: _ => true, + AnyNumber: _ => typeof x === 'number', + AnyString: _ => typeof x === 'string', + AnyBool: _ => typeof x === 'boolean', + Truthy: _ => !!x, + Falsey: _ => !x, + Group: ({ exprs }) => exprs.every(e => check(e)(x, i, ls)), + _: _ => false, }) ) }; - + const cs = exprs.map(check) return list.filter((x, i, ls) => cs.every(c => c(x, i, ls))) |
