Adapt to new dataspacePatterns
This commit is contained in:
parent
54ad58df59
commit
d6a303e1e8
|
@ -1,5 +1,5 @@
|
||||||
from .schema import dataspacePatterns as P
|
from .schema import dataspacePatterns as P
|
||||||
from . import Symbol
|
from . import Symbol, Record
|
||||||
|
|
||||||
_dict = dict ## we're about to shadow the builtin
|
_dict = dict ## we're about to shadow the builtin
|
||||||
|
|
||||||
|
@ -11,22 +11,25 @@ def bind(p):
|
||||||
CAPTURE = bind(_)
|
CAPTURE = bind(_)
|
||||||
|
|
||||||
def lit(v):
|
def lit(v):
|
||||||
return P.Pattern.DLit(P.DLit(v))
|
if isinstance(v, list) or isinstance(v, tuple):
|
||||||
|
return arr(*map(lit, v))
|
||||||
|
elif isinstance(v, set) or isinstance(v, frozenset):
|
||||||
|
raise Exception('Cannot represent literal set in dataspace pattern')
|
||||||
|
elif isinstance(v, _dict):
|
||||||
|
return dict(*((k, lit(vv)) for (k, vv) in v.items()))
|
||||||
|
elif isinstance(v, Record):
|
||||||
|
return _rec(v.key, *map(lit, v.fields))
|
||||||
|
else:
|
||||||
|
return P.Pattern.DLit(P.DLit(P.AnyAtom.decode(v)))
|
||||||
|
|
||||||
def rec(labelstr, *members):
|
def rec(labelstr, *members):
|
||||||
return _rec(Symbol(labelstr), *members)
|
return _rec(Symbol(labelstr), *members)
|
||||||
|
|
||||||
def _rec(label, *members):
|
def _rec(label, *members):
|
||||||
return P.Pattern.DCompound(P.DCompound.rec(
|
return P.Pattern.DCompound(P.DCompound.rec(label, members))
|
||||||
P.CRec(label, len(members)),
|
|
||||||
_dict(enumerate(members))))
|
|
||||||
|
|
||||||
def arr(*members):
|
def arr(*members):
|
||||||
return P.Pattern.DCompound(P.DCompound.arr(
|
return P.Pattern.DCompound(P.DCompound.arr(members))
|
||||||
P.CArr(len(members)),
|
|
||||||
_dict(enumerate(members))))
|
|
||||||
|
|
||||||
def dict(*kvs):
|
def dict(*kvs):
|
||||||
return P.Pattern.DCompound(P.DCompound.dict(
|
return P.Pattern.DCompound(P.DCompound.dict(_dict(kvs)))
|
||||||
P.CDict(),
|
|
||||||
_dict(kvs)))
|
|
||||||
|
|
Loading…
Reference in New Issue