# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.evaluation.av.envtype import envtype from bu4.evaluation.constructs.elambda import ELambda from bu4.evaluation.constructs.evaluable import Evaluable from bu4.linking.constructs.linked import Linked __all__ = ('LLambda',) class LLambda(Linked): value: Linked def __init__(self, name: bytes, value: Linked): self.name = name self.value = value self.future = self.value.future - {name} self.multifuture = self.future self.used = name in value.future def evaluable(self, env: envtype) -> Evaluable: return ELambda( {name: env[name] for name in self.future} if self.used else env, self.name, self.value ) def __str__(self): return f'({self.name.decode()}){self.value}'