Стеклопластиковые каркасы и ИО
Я только что исследовал FRP в Haskell (главным образом reactive-banana
(отзывы!)), и мне интересно, является ли это общим для них, и в случае реактивного банана, какова причина работать в IO
монаде вместо того, чтобы ограничиваться MonadIO
, или лучше rven, любой Monad
(чтобы я мог обеспечить собственный стек)?
Мне кажется, что это из-за фокуса на GUI-программировании, где вы интегрируете его с некоторыми существующими библиотеками, которые работают в IO
? Было бы возможно изменить его так, чтобы я мог интегрировать его с пользовательским стеком монад?
1 ответ:
Если вы спрашиваете, почему
reactimate :: Frameworks t => Event t (IO ()) -> Moment t ()
Ожидает событие со значениями типа
На практике пользовательские стеки монад только добавляют эффекты состояния / чтения / записи к базовой монадеIO ()
вместо того, чтобы разрешить пользовательскую монадуM ()
сinstance MonadIO M
, тогда ответ таков:IO
. Тем не менее, теоретически, вполне возможно добавить причудливый механизм управления, такой как сорутинги или недетерминизм. Я не знаю, как интегрировать внутреннее состояние, возникающее из комбинаторовaccumE
с этими более общими и я понятия не имею, что означает событие, происходящее в недетерминированном контексте. Вот почемуreactimate
ограничиваетсяIO
.Если у вас есть пользовательский стек монад, который относится к семейству state/reader/writer, то обычно можно сопоставить его с чистым вычислением
IO
и использовать его сreactimate
. Если вы обнаружите, что это не сработает (я действительно думаю, что может возникнуть проблема), мне потребуется более подробное описание конкретной ситуации, чтобы быть в состоянии помочь.