# Copyright (c) PARRRATE T&V 2021. All rights reserved. __all__ = ('PLambda',) from bu4.linking.constructs.llambda import LLambda from bu4.linking.states.afterlinking import AfterLinking from bu4.linking.states.linkingfinished import LinkingFinished from bu4.linking.states.linkingparsed import LinkingParsed from bu4.linking.states.linkingstate import LinkingState from bu4.linking.targets.allambda import ALLambda from bu4.parsing.constructs.parsed import Parsed class PLambda(Parsed): def __init__(self, name: bytes, value: Parsed): self.name = name self.value = value def link(self, promise: set[bytes]) -> LinkingState: assert self.name not in promise, f'overloaded: {self.name}' return AfterLinking( LinkingParsed( promise | {self.name}, self.value ), ALLambda( lambda value: LinkingFinished(LLambda( self.name, value )) ) )