From d6a303e1e87ceaad7c6d816a543a0c86c925c608 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Mon, 13 Dec 2021 22:22:30 +0100 Subject: [PATCH] Adapt to new dataspacePatterns --- syndicate/patterns.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/syndicate/patterns.py b/syndicate/patterns.py index 743c644..84cdb04 100644 --- a/syndicate/patterns.py +++ b/syndicate/patterns.py @@ -1,5 +1,5 @@ from .schema import dataspacePatterns as P -from . import Symbol +from . import Symbol, Record _dict = dict ## we're about to shadow the builtin @@ -11,22 +11,25 @@ def bind(p): CAPTURE = bind(_) 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): return _rec(Symbol(labelstr), *members) def _rec(label, *members): - return P.Pattern.DCompound(P.DCompound.rec( - P.CRec(label, len(members)), - _dict(enumerate(members)))) + return P.Pattern.DCompound(P.DCompound.rec(label, members)) def arr(*members): - return P.Pattern.DCompound(P.DCompound.arr( - P.CArr(len(members)), - _dict(enumerate(members)))) + return P.Pattern.DCompound(P.DCompound.arr(members)) def dict(*kvs): - return P.Pattern.DCompound(P.DCompound.dict( - P.CDict(), - _dict(kvs))) + return P.Pattern.DCompound(P.DCompound.dict(_dict(kvs)))