from typing import Mapping, Iterator from bu4.evaluation.avcontainer import AVContainer from bu4.evaluation.aftervalue import AfterValue, envtype, Evaluable class LambdaEnv(Mapping): def __getitem__(self, k: bytes) -> AfterValue: if k == self.name: return self.container else: return self.env[k] def __len__(self) -> int: return len(self.env) + 1 def __iter__(self) -> Iterator[AfterValue]: yield self.name yield from self.env def __init__(self, env: envtype, name: bytes, evaluable: Evaluable): self.env = env self.name = name self.container = AVContainer(evaluable).after_value