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

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

Date: 2010-10-10 04:12 am (UTC)
From: [identity profile] thedeemon.livejournal.com
А что непонятного в процессе выполнения? Там же все линейно и просто, как пишется, так и слышится.

Date: 2010-10-10 07:40 am (UTC)
From: [identity profile] metaclass.livejournal.com
Не, оно линейно и просто, если монада простая. Уже для списков это не совсем так.
И работает оно, если методы монадические правильно реализованы. А там в F#, кроме Bind и Return еще и опциональных всяких методов много (For,TryFinally,Using,While итд), плюс метод Delay для выстраивания побочных эффектов в правильном порядке, в общем, полный абзац.

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 Jun. 7th, 2025 08:19 pm
Powered by Dreamwidth Studios