# Copyright (c) PARRRATE T&V 2021. All rights reserved. from bu4.combinatory.lcombinatory import LCombinatory from bu4.encoding.codes import CODE_CMBK from bu4.evaluation.constructs.edelayed import EDelayed from bu4.evaluation.constructs.evaluable import Evaluable from bu4.evaluation.constructs.evalue import EValue from bu4.indexing.constructs.indexed import Indexed from bu4.indexing.evaluation.eivtype import eivtype from bu4.linking.evaluation.elvtype import elvtype from bu4.linking.constructs.linked import Linked from bu4.parsing.extensions.CodeExtension import CodeExtension from bu4.transform.states.transformfinished import TransformFinished from bu4.transform.states.transformstate import TransformState __all__ = ('EKC', 'IKC', 'XIK', 'LKC', 'XLK',) class EKC(EValue): def call(self, argument: Evaluable) -> Evaluable: return EDelayed(argument) def __str__(self): return f'K' class IKC(Indexed): def attach(self, ev: eivtype) -> Evaluable: return EKC() def bytes(self) -> TransformState[bytes]: return TransformFinished(bytes([CODE_CMBK])) def __str__(self): return f'K' class XIK(CodeExtension[Indexed], code=CODE_CMBK): def apply(self) -> TransformState[Indexed]: return TransformFinished(IKC()) class LKC(LCombinatory): def __init__(self): self.future = set() self.multifuture = set() def attach(self, env: elvtype) -> Evaluable: return EKC() def index(self, promise: list[bytes]) -> TransformState[Indexed]: return TransformFinished(IKC()) def __str__(self): return f'K' class XLK(CodeExtension[Linked], code=CODE_CMBK): def apply(self) -> TransformState[Linked]: return TransformFinished(LKC())