Welcome to FP book’s documentation!¶
Введение¶
Note
Разделять главы на две части: простую и сложную
Вместо предисловия (?)¶
Что такое ФП вообще? Почему OCaml, а не какой-нить Haskell? На каких примерах надо рассказывать? Будет ли плохо, если книжка превратится в набор рецептов про программирование вообще
//Section //——-
Программирование в малом¶
Тут байка про перескок с Java на OCaml, и как не очень правильно сравнивать паттерны банды 4х с ADT
Обычные алгебраические типы¶
ПРо енумы из Си
[boolean blindeness](https://github.com/quchen/articles/blob/master/algebraic-blindness.md)
типы-произведения и структуры
discriminated unions (наверное можны забить, так как с-cube мог ошибаться)
нормальные алгебраические типы данных
Примеры
Полезные свойства алгебраических типов: единственность представления
Списки и спископодобные структуры данных¶
Вводятся как каноничный пример алгебрических структур данных
Списки (‘a list)
ПОследовательности отложенных вычислений (‘a seq)
Ленивые списки (‘a stream)
Синтаксис и семантика¶
Примеры где за одинаковым синтаксисом, может стоять разная семантика
формулы: (целые числа против нецелых, с бесконечностью и без, целые против битвекторов)
- языки программирования
Сишечка и lexer hack
ленивые и не очень
смысл синтаксиса JS и отсутствие смысле в других языках
Операционная семантика: интерпретатор
Upgrade: deep embedding, shallow embedding & HOAS
Программирование в целом¶
Примеры миниязыков¶
парсер-комбинаторы
принтер-комбинаторы
мэтчинг-комбинаторы
Миниязык описания оптимизаций [в компиляторе Go](https://habr.com/ru/post/415771/)
[Combining Deep and Shallow Embedding of Domain-Specific Languages](http://www.cse.chalmers.se/~josefs/publications/deepshallow.pdf)
Архитектура¶
[SOLID == ООП?](https://habr.com/ru/post/509430/)
Абстрактные концепции¶
которые надо разъяснять по ходу дела
reference transparency
Часть 1¶
Lists¶
// Subsection // ~~~~~~~~~~
This is a normal reST paragraph that contains several index entries.
Types¶
// Subsection // ~~~~~~~~~~
You can use backticks
for showing highlighted
code.
Часть 2¶
Tansformers¶
// Subsection // ~~~~~~~~~~
GADTs¶
// Subsection // ~~~~~~~~~~
Примеры
Равенство
Оптимизированные массивы https://blog.janestreet.com/why-gadts-matter-for-performance/
STLC-like interpreter https://stackoverflow.com/questions/22676975/
Глава унижки из Кембриджа https://www.cl.cam.ac.uk/teaching/1415/L28/gadts.pdf
https://stackoverflow.com/questions/41797085/writing-an-interpreter-with-ocaml-gadts
https://ocaml.org/meetings/ocaml/2013/proposals/formats-as-gadts.pdf
https://www.irif.fr/~gradanne/papers/gadts.pdf Drup’s slides
You can use backticks
for showing highlighted
code.
Часть 3 (Свалка)¶
Что добавить¶
Functor¶
Alternative¶
Monad¶
Final-tagless style¶
Ввод-вывод¶
Почему hello world стандартный плох. Видео от создателя Node.js
iteratee (Iteratees на medium)
conduit
Note
Example: This function is not suitable for sending spam e-mails.
You can use backticks
for showing highlighted
code.
[Beyond Church encoding: Boehm-Berarducci isomorphism of algebraic data types and polymorphic lambda-terms](https://okmij.org/ftp/tagless-final/course/Boehm-Berarducci.html)
А тут мы пишем, что хочется получить
- Программирование в малом
- Алгебраические типы
Нужные какие-то примеры?
upgrade с фантомными типами
upgrade c GADT
- То, что нельзя опустить
Хвостовая рекурсия
CPS
- ULC
Показать late binding на разных стратегиях
property-based testing ?
deriving ?
- DSL
различие shallow и deep
пример со стэком и окасаки
парсеры и принтеры
- Программирование больших кусков
- Модули
Функторы: показать три вида
Final tagless?
Расширябельность: объекты, extensible ADT и т.д.
- Архитектурные паттерны?
hash-consing