Effect. Показалось интересным что
Option и Either являются подтипом Effect. Но при этом Option не является подтипом Either. Почему?
Option и Either являются описанием данных, a Effect - вычисления.Вычисления запускаются движком эффeкта - он то и будет интерпретировать
Option и Either, как Effect - константу (вычисления которые всегда возвращают одно и то же).Exit - тот же Either, но имеет семантику "результат вычисления Effect " - к нему применяется вышеописанная логика.Tag - описание связи ( Id<->Value ) зависимости, интерпретируется как Effect который вернет реализацию зависимости Value, если предоставить ее IdSTM - Effect который выполнится с гарантией транзакционности.Stream - вычисление которое может испустить несколько значений - Effect уже представляется как single-shot StreamSink - приемник значений испускаемых Stream - Effect работает как "константный" - Sink Интересным является и реализация этой иерархии:
- Каждый вышестоящий модуль в иерархии аугментирует непосредственно предыдущий - на уровне типов
- В реализации типов ниже
Effect в иерархии добавлено дополнительное поле _op - на которое опирается движок