Size: a a a

2020 May 13

DS

Doge Shibu in rust_offtopic
Nick Linker
И я писал. Да, есть масса недостатков, и бойлерплейт, и перфоманс (если делать тупо), но зато код ОФИГЕННО тестируемый во всех аспектах и срезах, и это перевешивает все недостатки.
Бойлерплейт кстати тоже можно было бы пофиксить при желании. В пакете free уже есть из коробки генерация алгебр и соответствующих функций, осталось сделать генераторы для сумм и произведений и вуаля.

UPD. ОФИГЕННО
Так суть в том, что final tagless даёт то же самое, но без бойлерплейта
источник

DS

Doge Shibu in rust_offtopic
Nick Linker
И я писал. Да, есть масса недостатков, и бойлерплейт, и перфоманс (если делать тупо), но зато код ОФИГЕННО тестируемый во всех аспектах и срезах, и это перевешивает все недостатки.
Бойлерплейт кстати тоже можно было бы пофиксить при желании. В пакете free уже есть из коробки генерация алгебр и соответствующих функций, осталось сделать генераторы для сумм и произведений и вуаля.

UPD. ОФИГЕННО
Т.е. всё вот это:
код ОФИГЕННО тестируемый во всех аспектах и срезах, и это перевешивает все недостатки.


Точно так же есть и во final tagless стиле
источник

A

Aleksandr Khristenko in rust_offtopic
Doge Shibu
Так суть в том, что final tagless даёт то же самое, но без бойлерплейта
Окей, ты можешь порекомендовать какую-нибудь статью, где расписан этот подход на примере какого-нибудь приложения?
источник

NL

Nick Linker in rust_offtopic
Doge Shibu
Так суть в том, что final tagless даёт то же самое, но без бойлерплейта
возможно я ошибаюсь, но он не даёт такой свободы для тестирования.
Вот например https://github.com/nlinker/testing-code-that-accesses-db-in-haskell
На мой взгляд лучше всего с тестированием без бд у фримонад.
источник

DS

Doge Shibu in rust_offtopic
Aleksandr Khristenko
Окей, ты можешь порекомендовать какую-нибудь статью, где расписан этот подход на примере какого-нибудь приложения?
Там одинаковый код между tf стилем и Free
источник

DS

Doge Shibu in rust_offtopic
Т.е. буквально изомофрный. И важная деталь начнется тогда, когда у тебя появится второй вид эффектов
источник

DS

Doge Shibu in rust_offtopic
Вот тогда на фри пойдёт веселье, а на tagless final ничего не изменится
источник

NL

Nick Linker in rust_offtopic
Aleksandr Khristenko
Окей, ты можешь порекомендовать какую-нибудь статью, где расписан этот подход на примере какого-нибудь приложения?
https://markkarpov.com/post/free-monad-considered-harmful.html

Но не забудь посмотреть и обсуждение на реддите ради объективности
https://www.reddit.com/r/haskell/comments/72th9v/free_monad_considered_harmful/
источник

Т8

Т-34 85 in rust_offtopic
Doge Shibu
STRef, и т.д. и т.п.
Это высокоуровневая эмуляция императивщины?
источник

DS

Doge Shibu in rust_offtopic
Вот тут ещё верную деталь про MTL говорят:
All in all, the only serious cost of mtl-style is the n2 instances problem. But if you're having trouble with all the instances you have to write, just make a top-level application monad and write the instances there.

Вот это самый здравый вариант работы с final tagless и MTL. Оставьте трансформеры авторам библиотек.
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
Это высокоуровневая эмуляция императивщины?
Нет, это прям напрямую компилится в императивный, мутабельный код.
источник

DS

Doge Shibu in rust_offtopic
Без всякой эмуляции
источник

DS

Doge Shibu in rust_offtopic
Aleksandr Khristenko
Окей, ты можешь порекомендовать какую-нибудь статью, где расписан этот подход на примере какого-нибудь приложения?
Можно посмотреть статьи у скалистов про final tagless, там прям дофига. И в скале final tagless выиграл сразу и бесповоротно.

Там разве что Дегуз дурью с ZLayer маятся, но ему надо было выпендрется, а то иначе он свои курсы никому не продаст.
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
Это высокоуровневая эмуляция императивщины?
Высокоуровевая эмуляция императивщины - это State
источник

Т8

Т-34 85 in rust_offtopic
Doge Shibu
Нет, это прям напрямую компилится в императивный, мутабельный код.
так, стоп. В чисто функциональном языке можно мутировать стейт напрямую? Я правильно понял?
источник

JC

Julian =) Coffee in rust_offtopic
Ну если лямбда-исчисление эквивалентно тьюринг-машине, то да
источник

JC

Julian =) Coffee in rust_offtopic
В чем проблема
источник

DS

Doge Shibu in rust_offtopic
Т-34 85
так, стоп. В чисто функциональном языке можно мутировать стейт напрямую? Я правильно понял?
Да. Если оно делается в ссылочно прозрачном стиле.

Как пример:
https://wiki.haskell.org/Monad/ST
источник

Т8

Т-34 85 in rust_offtopic
Julian =) Coffee
Ну если лямбда-исчисление эквивалентно тьюринг-машине, то да
это не напрямую, а через эмуляцию
источник

Т8

Т-34 85 in rust_offtopic
через эмуляцию можно что угодно сделать
источник