Что такое «Защелка» и «Импульс» в реактивном банане?

Выполните защелку и Типы Pulse существуют в литературе по FRP, или это изобретение автора реактивного банана?

Просто глядя на типы, они примерно соответствуют Behavior и Event (соответственно), но я хотел бы знать, в чем разница, и основана ли их реализация на каких-либо формальных исследованиях.

Спасибо!


person MitchellSalad    schedule 28.08.2017    source источник
comment
Очень похоже на рекомендацию к ресурсу (не по теме). Возможно, перефразируйте так, что «конкретный автор» признает эти концепции FRP? или вот мое понимание семантики Latch и Pulse - правильно ли это понимание?   -  person user2407038    schedule 28.08.2017
comment
@ user2407038 Спасибо, я не знал, что рекомендации по ресурсам не по теме. Я попытался прояснить вопрос, дав больше контекста.   -  person MitchellSalad    schedule 28.08.2017
comment
Reactive.Banana.Prim — эффективная реализация с принудительной отправкой, используемая для производственного кода. Содержит трудно понять коммерческую тайну. ;-). Будем надеяться, что @heinrich-apfelmus может рассказать здесь больше.   -  person Cirdec    schedule 28.08.2017


Ответы (1)


Генрих здесь. Типы Pulse и Latch, вероятно, лучше всего рассматривать как «леммы», которые я придумал и которые очень полезны для реализации типов Event и Behavior. Я уверен, что они окажутся полезными при попытке более формально обосновать реализацию, но это огромный исследовательский проект, и я не нашел ни времени, ни ресурсов для этого.

Тип Pulse почти такой же, как Event, за исключением того, что все функции должны иметь монадический тип, например

mapP :: (a → b) → Pulse a → Build (Pulse b)
-- vs
mapE :: (a → b) → Event a → Event b

Тип Event реализуется путем избавления от монады Build с помощью черной магии (= наблюдаемое разделение). Имя Build звучит как служебная монада, что так и есть, если вы посмотрите на код, но эта монада также является фундаментальной, потому что она имеет семантическую интерпретацию как «момент времени», и не очевидно, почему вы можете иногда удалить ее , а иногда и нет.

Тип Latch также очень похож на Behavior, за исключением того, что последний также включает Event из прагматических соображений. Аналогичные соображения применимы и к монаде Build.

Надеюсь, это ответит на больше вопросов, чем вызовет. ???? Извините, что я не могу более подробно рассказать о внутренней работе реактивного банана, это выходит за рамки ответа StackOverflow.

person Heinrich Apfelmus    schedule 29.08.2017