metaclass: (Default)
[personal profile] metaclass
iterParseDeviceMsg :: Monad m => Enumeratee ByteString DeviceMsg m b
iterParseDeviceMsg = sequence $ iterParser $ parseDeviceMsg

читает последовательность строк из источника, выдает на выходе последовательность DeviceMsg.
sequence взят из Data.Enumerator, где написано:
-- | Feeds outer input elements into the provided iteratee until it yields
-- an inner input, passes that to the inner iteratee, and then loops.
sequence :: Monad m => Iteratee ao m ai
         -> Enumeratee ao ai m b

Что характерно, я не очень понимаю, что я делаю, кроме того, что превратил Iteratee(сток для данных) в Enumeratee(фильтр-конвертор для потока данных).
В итоге использование выглядит таким образом:
processWeather1:: MonadIO m => SerialPort -> m ()
processWeather1 serial = do
     E.run_ $ enumSerial serial E.$= iterParseDeviceMsg E.$$ printObjI   


Идея примерно в следующем: данные читаются из потока небольшими кусками и скармливаются парсеру, который выдает на выходе последовательность уже разобранных данных. И предположительно, это все должно работать в постоянной памяти.
Можно было бы сделать вообще влоб, но с Iteratees более мозгозасушивающе, заодно можно копипастить идеи из http://www.yesodweb.com

Сейчас вот еще к этой хрени нужно прикрутить rrdtool для складывания считанных значений в него и какой-нибудь сервис попроще, чтобы отдавать текущие показания датчиков.

Date: 2011-10-30 04:40 pm (UTC)
From: [identity profile] kurilka.livejournal.com
а можешь привести пример, что ты из есода подсмотрел?

Date: 2011-10-30 05:04 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Разъяснение enumerator и его совместное использование с attoparsec в http-enumerator.
Без примеров использования понять достаточно сложно.

Date: 2011-10-30 04:43 pm (UTC)
From: [identity profile] gds.livejournal.com
одобряю.

кстати, тоже некоторое время не совсем понимал, что делал, а тупо, "в лоб", портировал на камло. Потом-то понял. Но понимание странное -- например, если объяснять sequence хоть сколько-нибудь подробнее, чем в комментарии к нему, то получится слишком много текста. Может быть, это потому, что сами идеи не слишком простые лежат под низом, или не слишком простая их комбинация.

Date: 2011-10-30 06:50 pm (UTC)
From: [identity profile] theiced.livejournal.com
у вас ещё нет навязчивого желания покупать продукты в азбуке вкуса?

Date: 2011-10-30 06:53 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Ты не поверишь, продукты мне с автобусом из деревни передают!

Date: 2011-11-01 04:08 am (UTC)
From: [identity profile] nivanych.livejournal.com
Тема силовых упражнений не раскрыта!!

Date: 2011-11-01 05:03 am (UTC)
From: [identity profile] metaclass.livejournal.com
Я уже месяц никак не соберусь дойти до магазина и купить гантели.

Date: 2011-11-01 05:35 am (UTC)
From: [identity profile] nivanych.livejournal.com
;-) А у меня дома две гири по 32 — мне пока хватает.

Date: 2011-11-01 06:14 am (UTC)
From: [identity profile] kurilka.livejournal.com
Я вот с одной пудовой как-то себя уже начинаю ущербным чувствовать...

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 Sep. 22nd, 2025 08:31 pm
Powered by Dreamwidth Studios