aboutsummaryrefslogtreecommitdiff
path: root/src/index.ts
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/index.ts34
1 files changed, 23 insertions, 11 deletions
diff --git a/src/index.ts b/src/index.ts
index 691d676..db6630c 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,17 +1,29 @@
-import { fold, map } from 'fp-ts/lib/Either'
-import { identity, pipe } from 'fp-ts/lib/function'
-import { find } from './eval'
+import { getOrElseW, map } from 'fp-ts/lib/Either'
+import { flow, pipe } from 'fp-ts/lib/function'
+import {fst} from 'fp-ts/lib/Tuple'
+import * as ev from './eval'
import { parser } from './parser'
+import {ListExpr} from './types'
const toSourceString = (r: string | RegExp): string => typeof r === 'string' ? r : r.source
-export const filter = <T>(listExp: string | RegExp, list: T[]): T[] =>
+export const liexp: (r: string | RegExp) => ListExpr = flow(
+ toSourceString,
+ parser,
+ map(fst),
+ getOrElseW(([e, _]) => { throw new Error(e) })
+)
+
+export const matchAll = <T>(exp: string | RegExp, list: T[]) =>
+ pipe(
+ exp,
+ liexp,
+ lxp => ev.matchAll(lxp, list),
+ )
+
+export const filter = <T>(exp: string | RegExp, list: T[]): T[] =>
pipe(
- listExp,
- toSourceString,
- parser,
- map(([lxp, _]) => find(lxp, list)),
- fold(([err, _]) => {
- throw new Error(err)
- }, identity),
+ exp,
+ liexp,
+ lxp => ev.find(lxp, list),
)