# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.evaluation.av.envtype import envtype from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evaluable import Evaluable from bu4.indexing.constructs.idelayed import IDelayed from bu4.indexing.constructs.indexed import Indexed from bu4.linking.constructs.linked import Linked 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__ = ('LDelayed',) class LDelayed(Linked): value: Linked def __init__(self, value: Linked): self.value = value self.future = self.value.future self.multifuture = self.future def attach(self, env: envtype) -> Evaluable: return EDelayed(env, self.value) def index(self, promise: list[bytes]) -> TransformState[Indexed]: return AfterTransform( TransformStart(lambda: self.value.index(promise)), ATLambda( lambda value: TransformFinished(IDelayed(value)) ) ) def __str__(self): return f'(){self.value}'