builtup4/bu4/parsing/constructs/plambda.py
2021-08-01 01:17:46 +03:00

33 lines
1.0 KiB
Python

# 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
))
)
)