builtup4/bu4/combinatory/lkc.py

55 lines
1.5 KiB
Python

# Copyright (c) PARRRATE T&V 2021. All rights reserved.
from bu4.combinatory.lcombinatory import LCombinatory
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.linkable.evaluation.elvtype import elvtype
from bu4.parsing.codes import CODE_CMBK
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',)
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'