# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.linkable.constructs.parsed import Parsed from bu4.linking.constructs.linked import Linked from bu4.linking.constructs.llambda import LLambda from bu4.transform.states.aftertransform import AfterTransform from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstart import TransformStart from bu4.transform.states.transformstate import TransformState from bu4.transform.targets.atlambda import ATLambda __all__ = ('PLambda',) class PLambda(Parsed): def __init__(self, name: bytes, value: Parsed): self.name = name self.value = value def link(self, promise: set[bytes]) -> TransformState[Linked]: assert self.name not in promise, f'overloaded: {self.name}' return AfterTransform( TransformStart(lambda: self.value.link(promise | {self.name})), ATLambda( lambda value: TransformFinished(LLambda( self.name, value )) ) )