an exercise
Jul. 11th, 2014 06:29 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
so, can you write in Scala a web server using state monad, without any variable? :)
Kind of inverts your perception of what controls what, but who cares. It's just an FSM.
Is not it a nice exercise? :)
Kind of inverts your perception of what controls what, but who cares. It's just an FSM.
Is not it a nice exercise? :)
no subject
Date: 2014-07-12 02:25 am (UTC)what is the expected outcome? one lifting weights gains muscle mass, one writing monads for the sake of writing monads achieves what?
may be entertaining though for the first few minutes.
no subject
Date: 2014-07-12 03:21 am (UTC)This one is good for your mental health.
no subject
Date: 2014-07-12 03:47 am (UTC)no subject
Date: 2014-07-12 03:38 am (UTC)no subject
Date: 2014-07-12 03:41 am (UTC)no subject
Date: 2014-07-12 03:55 am (UTC)no subject
Date: 2014-07-12 04:37 am (UTC)no subject
Date: 2014-07-12 04:48 am (UTC)no subject
Date: 2014-07-12 05:04 am (UTC)Можно какой-нибудь микрообразец?
no subject
Date: 2014-07-12 05:37 am (UTC)"read_method" -- итерат, читающий метод (get/post/..).
">>=" -- bind для монады итератов (не IO-монады).
При выполнении "read_method >>= fun .. -> .." bind итератов рассматривает значение read_method. Это значение на нижнем уровне представляет собой итерат, который хочет данные, и с этими данными он делает вот что: из массива символов берёт всё, пока не встретит пробел, но не более заданного количества символов.
Если данные есть, то прочитанное/обработанное передаётся в замыкание "fun meth -> дальнейшее чтение..", а остаток массива символов используется bind'ом итератов для кормления того, что получится после применения значения с http-методом к "fun meth -> .." -- там будет очередной итерат.
Получается, http-метод, когда прочитан, появляется в "состоянии" как значение, находящееся в окружении замыкания (closure environment), имеет имя meth, доступен ниже по коду.
А внутри итераты представляют собой своего рода стейт машину, которая на вход получает массив символов, а выход у неё "Всё прочитал, но не определился с возвращаемым значением, давай ещё данные | Мне хватило, вот значение, вот остаток массива".
Запускалка этих машин -- энумератор, его делом является: взять итерат-аргумент, который будем кормить, создать буфер (массив, из которого будем кормить), читать из сокета в массив, по наличию данных пытаться кормить итерат, пока тот не накушается.
Наверное криво объяснил. Если что-то явно криво/непонятно -- я попробую рассказать другими словами.
no subject
Date: 2014-07-12 02:03 pm (UTC)no subject
Date: 2014-07-12 07:26 pm (UTC)no subject
Date: 2014-07-13 01:52 am (UTC)