Drop discards in smart pattern constructors
This commit is contained in:
parent
20b83aa5a5
commit
58daa8c981
|
@ -2,7 +2,7 @@
|
|||
/// SPDX-FileCopyrightText: Copyright © 2016-2021 Tony Garnock-Jones <tonyg@leastfixedpoint.com>
|
||||
|
||||
import { canonicalString, is, KeyedDictionary, Record, RecordConstructorInfo, Value } from '@preserves/core';
|
||||
import { AnyValue } from './actor.js';
|
||||
import { AnyValue, Ref } from './actor.js';
|
||||
import * as P from '../gen/dataspacePatterns.js';
|
||||
|
||||
export type Path = Array<AnyValue>;
|
||||
|
@ -164,26 +164,35 @@ export function lit(v: AnyValue): P.Pattern {
|
|||
return P.Pattern.DLit(P.DLit(v));
|
||||
}
|
||||
|
||||
function indexedMembers(items: P.Pattern[]): KeyedDictionary<number, P.Pattern, Ref> {
|
||||
const members = new KeyedDictionary<number, P.Pattern, Ref>();
|
||||
items.forEach((p, i) => {
|
||||
if (!is(p, _)) members.set(i, p);
|
||||
});
|
||||
return members;
|
||||
}
|
||||
|
||||
export function rec(label: AnyValue, ... fields: P.Pattern[]): P.Pattern {
|
||||
return P.Pattern.DCompound(P.DCompound.rec({
|
||||
ctor: P.CRec({
|
||||
label,
|
||||
arity: fields.length,
|
||||
}),
|
||||
members: new KeyedDictionary(fields.map((p, i) => [i, p])),
|
||||
members: indexedMembers(fields),
|
||||
}));
|
||||
}
|
||||
|
||||
export function arr(... patterns: P.Pattern[]): P.Pattern {
|
||||
return P.Pattern.DCompound(P.DCompound.arr({
|
||||
ctor: P.CArr(patterns.length),
|
||||
members: new KeyedDictionary(patterns.map((p, i) => [i, p])),
|
||||
members: indexedMembers(patterns),
|
||||
}));
|
||||
}
|
||||
|
||||
export function dict(... entries: [AnyValue, P.Pattern][]): P.Pattern {
|
||||
return P.Pattern.DCompound(P.DCompound.dict({
|
||||
ctor: P.CDict(),
|
||||
members: new KeyedDictionary(entries),
|
||||
}));
|
||||
const members = new KeyedDictionary<AnyValue, P.Pattern, Ref>();
|
||||
entries.forEach(([k, p]) => {
|
||||
if (!is(p, _)) members.set(k, p);
|
||||
});
|
||||
return P.Pattern.DCompound(P.DCompound.dict({ ctor: P.CDict(), members }));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue