Хаскель и separation of concerns
Dec. 15th, 2012 11:05 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
http://juick.com/2165512
Можно ли на всем этом сделать так: https://gist.github.com/4292029
И чтобы goodProcessingFunction можно было нормально комбинировать из отдельных кусков, вплоть до того, что явно определить точки, где данные юзера становятся данными для девайса и наоборот.
Или например, обощить это, прикрутив еще и какой-нибудь tcp сервер.
Т.е. у нас есть несколько независимых IO каналов, каждый со своими форматами данных, на каждый канал прикрутить сменный парсер-сериализатор, чтобы в ядро бизнес-логики этот канал приходил уже в виде значений нормальных типов.
А потом еще захочется хранить в бизнес-логике состояние, подключаться к БД и все это, по-моему, нахрен умрет под грузом типов и слоев монад.
no subject
Date: 2012-12-15 11:49 am (UTC)Контекст: я сделал простой http-сервер на окамле, на lwt (зелёные треды), на итератах (моя либка ocaml-iteratees), и вполне доволен. Сервер умеет в том числе принимать заливаемые файлы.
"
например, заливку файла по хттп рассмотрим. Чтение из сокета -- enumerator, который кормит итерат-аргумент трафиком. Итерат-аргумент по завершении работы даёт http-ответ. На основании запроса и ответа вычисляется, стоит ли закрывать сокет, и при нужде сокет закрывается (или обработка продолжается). То есть, закрытие сокета осуществляется при выходе из функции, которой дают открытый сокет. Далее, итератор-аргумент получает данные, определяет, что хотят, и, если это заливка, вызывает функцию, берущую имя файла, возращающую итерат, открывающий файл, пишущий в файл все чанки, которые в этот итерат суют. Когда сунут EOF -- файл закроется, логика закрытия прописана в этом же итерате. А EOF сунут по-любому, когда в трафике встретится boundary, это гарантируется тем enumeratee, который режет mime multipart на куски и кормит кусками свой итерат-аргумент. То есть, тут вполне таки гарантии того, что и сокет будет закрыт (то есть, сокет будет либо работать на благо http, либо будет закрыт по окончании работы), и есть гарантии того, что по окончании mime-куска с заливаемым файлом этот файл будет закрыт.
"