Понимание алгебры c эффектов - PullRequest
1 голос
/ 04 августа 2020

Я наткнулся на язык эффектов и идею алгебраических c эффектов. Но я не уверен, правильно ли я понял концепцию. Я попытался повторно реализовать basi c "hello world" example in Python и придумал следующее:

import contextlib
import contextvars

handlers = contextvars.ContextVar('handlers', default={})

def effect(name, *args, **kwargs):
    try:
        return handlers.get()[name](*args, **kwargs)
    except KeyError:
        raise RuntimeError(f'No handler for effect {name}')

@contextlib.contextmanager
def handle(**kwargs):
    token = handlers.set(dict(**handlers.get(), **kwargs))
    try:
        yield
    finally:
        handlers.reset(token)

def example():
    n = 0
    produce = True
    while produce:
        produce = effect('Yield', n)
        n += 1
    return n

with handle(Yield=lambda n: n < 3):
    example()

Мой вопрос: может ли этот фрагмент квалифицироваться как эффект правильной алгебры c? Если нет, то в чем я ошибаюсь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...