Oct. 9th, 2010

metaclass: (Default)
Что-то задолбало меня в кодогенераторе таскать по функциям руками модель, окружение и контекст кодогенерации и результат, решил глянуть на монады (ака "computational workflows" в F#).
По идее, там гибрид Reader, Writer и State монад - модель и окружение только читаются, результат пишется, контекст и читается и пишется. Но это пока только первоначальный вариант, я сходу более адекватного ничего не придумал.
Ну что я могу сказать - в отсутствие typeclasses и немного ограниченном выводе типов это в некотором роде превращается в тыкву, но это не так страшно.
А вот то, что понять и отладить это в принципе невозможно - это факт. Монадический код компилятором de-sugar-ится в последовательность вызовов класса-билдера(Return,Bind и еще куча дополнительных методов), причем процесс этот далеко не самоочевидный, а уж процесс выполнения так и вообще похож на броуновское движение по коду.
По идее, можно было бы пойти ООП-шным путем, положив модель и окружение в поля объекта, а результат оставить как и был - ленивый список(на самом деле sequence) строк, тем более что эти sequence на самом деле тоже сделаны из монад где-то в дебрях компилятора, и я не уверен что мой синтаксис будет более адекватен, чем уже существующий.

PS: Я не знаю, чо я сделал, но оно вообще-то работает.

Profile

metaclass: (Default)
metaclass

April 2017

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

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 6th, 2025 07:45 pm
Powered by Dreamwidth Studios