blob: 5bcb4f96c40b4fea28cf9ace3b24d7d3663b5f34 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import * as Either from 'fp-ts/Either'
import { flow, pipe } from 'fp-ts/function'
import { fst } from 'fp-ts/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 liexp: (r: string | RegExp) => ListExpr = flow(
toSourceString,
parser,
Either.map(fst),
Either.getOrElseW(([e, _]) => {
throw new Error(e)
}),
)
export const matchAll = <T>(exp: string | RegExp, list: T[]) =>
pipe(exp, liexp, lxp => ev.matchAll(lxp, list))
|