metaclass: (Default)
[personal profile] metaclass
В Iteratees обратная связь от iteratee к enumerator реализована хитрым образом - через исключения. Т.е. кидается исключение с данными, которые нужно обработать в источнике данных, например, указатель для рандомного seek в файле, оно перехватывается енумератором-источником данных и обрабатывается.

Мне видимо, придется посылать команды ком-порту в том же стиле, но вообще надо еще посушить мозги над структурой типов используемых в Iteratees, чтобы понять, почему сделано именно так, а не иначе.
Ну и посмотреть, как пакет enumerator используется в Yesod, на предмет того же - как они читают из сокета и пишут в него ответ.

Date: 2011-10-20 11:21 am (UTC)
From: [identity profile] gds.livejournal.com
обратную связь с enumerator сделали так, потому что самое простое-тупое.
Но кто заставляет использовать именно такую схему?
Я на ocaml+lwt+iteratees вполне пользуюсь тем, что iteratees у меня построены поверх манатки, в том числе io-подобной, и спокойно шлю данные через io-функции, выполняя их lift в манатку итератов.
Для других же целей (там, где restful) -- на каждый запрос запускаю по итерату, они возвращают ответ, который я отправляю в нужный output_channel (неизвестный, на всякий случай, обрабатывающему итерату).
Для более-менее общего расклада я бы предложил что-то типа итерата, хранящего внутри текущее состояние и, когда будет готов его ответ, возвращающего как сам ответ, так и итерат, который должен быть запущен в этой же "сессии общения" в качестве обработчика следующей команды. Цимес итератов соблюдён -- никаких явных манипуляций и вообще выдачи наружу промежуточных состояний.

Date: 2011-10-21 07:48 am (UTC)
From: [identity profile] permea-kra.livejournal.com
Возьмите coroutines. Честное слово, оно проще.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 15th, 2025 09:57 pm
Powered by Dreamwidth Studios