Стеклопластиковые каркасы и ИО
Я только что исследовал 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. Если вы обнаружите, что это не сработает (я действительно думаю, что может возникнуть проблема), мне потребуется более подробное описание конкретной ситуации, чтобы быть в состоянии помочь.