Entry tags:
Эпический ад
Написал таки кусок кодогенератора на F#. Сначала в лоб, просто конверсией моих типов в последовательность строк SQL запроса для создания таблиц, а потом мне резко разонравилось отсутствие разделения модели и представления и я прикрутил AST для SQL, заодно заменив выходной результат на string seq, то бишь IEnumerable<string>.
Завтра буду прикручивать AST для дельфей, если мне не откозлопитонируют мозг какой-нибудь срочно-капец-нужно-вчера хреновиной.
Теперь понимаю, чего
zabivator устроил хаскель-срач - когда над головой не висит чистота и ленивость, но есть discriminated unions, вывод типов и это дело корректно интегрировано в привычную среду, можно особо не задумываясь писать всякий мрак.
Но при этом однозначно начинать надо с хаскеля, а для F# - еще и дотнет знать, потому что иначе этот безумный бред понять затруднительно. Хаскель лаконичен, там те же самые идеи не заслоняются синтаксисом.
Завтра буду прикручивать AST для дельфей, если мне не откозлопитонируют мозг какой-нибудь срочно-капец-нужно-вчера хреновиной.
Теперь понимаю, чего
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Но при этом однозначно начинать надо с хаскеля, а для F# - еще и дотнет знать, потому что иначе этот безумный бред понять затруднительно. Хаскель лаконичен, там те же самые идеи не заслоняются синтаксисом.
Re: объекты (row types и их типизация; самое клёвое ооп, котор
Вот тут -- Private row types: abstracting the unnamed -- описываются применения row types (и полиморфных вариантных типов заодно).
Если вкратце и своими словами, типизация объектов в окамле структурная (член структуры = метод = "row" в официальной терминологии). Обращение к члену структуры (
obj#meth
) заставляет тайпчекер статически гарантировать наличие у объекта obj метода meth.Нет номинальной типизации/подтипизации объектов (по имени класса), но она легко эмулируется, если нужна.
Поля объектов могут быть как изменяемыми, так и неизменными, по желанию. Поля видны только в пределах объекта, методы видны и в пределах объекта, и за пределами. Класс может иметь типы-параметры (как обычные параметрические типы). Методы класса могут быть полиморфными (через это имеем полиморфизм второго ранга в объектах). Существует возможность создать объект или описать объектный тип, не создавая класс. Поддерживаются виртуальные методы (и статически проверяется, что любой создаваемый объект должен иметь полностью определённые методы). Поддерживается множественное наследование (хотя даже обычное наследование не часто нужно).
Одно из классных свойств ООП в окамле состоит в том, что нет нужды использовать большинство ООП-паттернов. А вот для чего можно использовать ООП, так это для эмуляции duck typing и typeclasses.