УМННБJ, ЯХВ. Войти !bnw Сегодня Клубы

https://bitbucket.org/gds/ocaml_incrcomp/src/tip/lib/incrcomp.mli
Суть токова: меня достало то, что нужно уметь простые типа-ленивые вычисления, но с умным перевычислением, если что изменилось, но при взгляде на frp / react как-то всё падает.
Я кое-кому говорил, что уложусь в 10 строчек велосипеда -- так вот, ошибся, но потому, что хотел сделать относительно общо. Получилось вроде миленько, однако, прошу, покритикуйте идею, апи, инглиш, да и всё вообще. Моё ниасиляторство react'а, например, тоже можно.

#ZW9FCV / @gds / 3722 дня назад

>ocaml
#ZW9FCV/1IP / @krkm / 3722 дня назад
Да, надо будет поебать синтаксис окамла канеш.
#ZW9FCV/QWC / @kb / 3722 дня назад
@kb я там использую revised syntax, а не обычный, поэтому может оно непривычно даже тебе. revised более логичный и безопасный, хотя чуток более verbose. А если семантика интересна -- представь, что это тот же х-ь, только вычисления по умолчанию не ленивые и всё сразу выполняется внутри помеси IO + Error + State + .. манаток.
#ZW9FCV/KIG / @gds --> #ZW9FCV/QWC / 3722 дня назад
@gds Да, с семантикой проблем нет, скорее превращение синтаксис->семантика страдают, с ходу не получилось понять, в любом случае.
#ZW9FCV/XO4 / @kb --> #ZW9FCV/KIG / 3718 дней назад
@gds То есть, спотыкаюсь на первом же `type t 'kind 'a;`.
#ZW9FCV/DMH / @kb --> #ZW9FCV/KIG / 3718 дней назад
@kb type -- определения типа. То, что с апострофами -- параметры. Так как в окамле есть хорошая модульность и интерфейсы, конкретно это определение в .mli (в интерфейсе) говорит, что вот есть такой-то тип, а у него такие-то параметры, а какой это тип внутри модуля -- это вас ниибёт. Удобная штука, защищает от своих же кривых рук просто заебись. А может быть, например, type option 'a = [ None | Some of 'a ] -- прямой аналог Maybe, тут он с телом. type source 'a = t [= `Source] 'a; -- просто алиас типа, для краткости. "для любого 'a известен тип source 'a, равный t [=`Source] 'a". Подставили первый параметр в t, второй параметр взяли из "type source 'a". Типа как с функциями, "let source a = t фиксированный_параметр a" (конечно, с типами тут гораздо более ограничено, по сравнению с функциями). А в функциях, типа "value get : t 'any_kind 'a -> 'a;", идёт неявная подстановка впереди "forall <типовые переменные>", то есть, получаем, что функция get для любых типовых переменных 'any_kind и 'a берёт значение с типом t 'any_kind 'a и возвращает значение с типом 'a. Так как 'any_kind может быть только [= `Source ] или [= `Computation ] (других не сконструировать, интерфейс не даёт нужных функций), то получаем, что get полиморфна относительно вида аргумента -- будь то source или computation, и полиморфна относительно значения, которое можно достать из этого аргумента. А 'any_kind -- просто документация, как бы намёк на то, что get берёт из source и из computation одинаково хорошо. "value set : source 'a -> 'a -> unit;", учитывая, что source это алиас, как бы равно "value set : t [=`Source] 'a -> 'a -> unit;", то есть, устанавливать значение можем только в source (и логично, computation сам считает своё значение). Этот выебон с ограничением возможных действий в зависимости от типового параметра называется "фантомные типы", наверняка встречается в хаскеле тоже. Как вижу, действительно, "у нас тут своя атмосфера", голой интуицией сложно. Да может и не нужно -- хаскель же явно лучше.
#ZW9FCV/LNK / @gds --> #ZW9FCV/DMH / 3718 дней назад
@gds Спасибо, я наконец-то понял что говорят окамловцы когда говорят "запилите нормальную систему модулей". У меня начала складываться в голове картинка, как соотносятся окамлевые модули, хаскелевые type-classes и хаскелевые type families (одно с другим таки сильно пересекается). В остальном -- потом ещё пару раз перечитаю на свежую голову, около половины пока понял.
#ZW9FCV/NRI / @kb --> #ZW9FCV/LNK / 3717 дней назад
@gds Ну всё, со второго прочтения вроде бы всё понял. Пока ничего годного сказать не могу, но хотя бы типы понял (вроде бы).
#ZW9FCV/MJ9 / @kb --> #ZW9FCV/LNK / 3715 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.