Ответ 1
conduit
и pipes
являются гораздо более зрелыми, чем machines
, но - сказанное - machines
пытается использовать другой путь, чем conduit
и pipes
.
С machines
, я пытаюсь использовать относительно простой API в терминах аргументов типа. И conduit
, и pipes
решили объединить все свои понятия, используя 5-6 переменных переменных типа.
Машины используют другой подход к параметризации машины (или Plan
) на своем "языке ввода", который ставит всю нагрузку на один дополнительный аргумент (или два в случае Plan
). Кроме того, выбирая возможность параметризации входного языка таким образом, он открывает возможности использования машин, которые могут принимать входные (не) детерминированные из нескольких источников входных данных. Результат - это просто бесплатная монада с дополнительной инструкцией "emit"!
В обмен на несколько более строгую политику в отношении того, как вы создаете и используете машины, она может в конечном итоге обеспечить лучшую безопасность в отношении асимптотики полученного кода.
Тем не менее, pipes
и conduit
имели много реального использования в мире, а machines
- это более или менее игровая площадка для меня, Рунар Бьярнасон и Пол Чиусано.
В настоящее время подходит для работы с вводом, который вы намерены потреблять полностью, но тем более для работы со сложными ресурсами или для синтаксического анализа, чем то, что вы получаете с этими двумя другими API.
Теперь об этом кванторе!
t
фактически существует количественное определение. Поступая таким образом, мы можем сделать Monad
для машин не заботясь о функториальности параметра k
. Это важно из-за реализации метода Source
. Если мне не понадобилось работать Source
, мы могли бы использовать более простой
data Step k o r = Stop
| Yield o r
| Await (k r) r
У этого был бы неудачный побочный эффект, который, когда вы пошли, чтобы составить Машину с Source
, что компилятор не знал бы, какой экземпляр Functor
выбрать, и вы будете купаться в ненужных аннотациях типа.
Экзистенциальная квантификация - это трюк, который я подхватил при работе с пакетом kan-extensions
. Это обобщение одного из типов Yoneda
.