from bu4.evaluation.proxy import eproxy
from bu4.evaluation.aftervalue import EValue
from bu4.toolchain.sync import sync


def to_bool(_01):
    return _01(True)(False)


def with_common_interface(value: EValue):
    value = sync(value.call(eproxy(0)))
    value = sync(value.call(eproxy(1)))
    value = sync(value.call(eproxy(lambda a: lambda b: a + b)))
    value = sync(value.call(eproxy(lambda n: lambda x: lambda y: x if n == 0 else y)))
    value = sync(value.call(eproxy(lambda n: lambda x: lambda y: x if n & 1 else y)))
    value = sync(value.call(eproxy(lambda n: n >> 1)))
    return value