TOV_MULTIMASSO
Каких-либо реализаций type 'f Fix = Fix of { unFix : 'f (Fix 'f) } не завезли? А то фримонады в FS+ есть, а неподвижной точки нет
TOV_MULTIMASSO
это который let fix f x = f (fix f) x?
Ayrat
это который let fix f x = f (fix f) x?
Ну это скучный вариант
Ayrat
Кстати не скомпилируется
TOV_MULTIMASSO
Опять я про rec забыл
Ayrat
Щас мы будем по пятому кругу обсуждать что объявлять Y через рекурсию чит, да и зачем. Если есть рекурсия, надо ей пользоваться
TOV_MULTIMASSO
А, вы ещё и а-ля (f. f f) (f. f f) объявляли, ну, Z-комбинатор, я имею виду
Ayrat
Через индуктивные типы тоже чит, так как они в общем изоморфны рекурсивным функциям
TOV_MULTIMASSO
Тащить что-то такое в код я б не стал
Диёр
это на эльфийском?
Ayrat
А, вы ещё и а-ля (f. f f) (f. f f) объявляли, ну, Z-комбинатор, я имею виду
Вот так православно, но в статических строготипизированных языках требуется хак чтобы так написать
Ayrat
это на эльфийском?
Это на кольце всевластия написано!
Ayrat
Короче, Y в фшарпе не нужен, так как есть rec функции и рекурсивные типы
TOV_MULTIMASSO
> кольце Кек
TOV_MULTIMASSO
Есть у кого ссылка на реализацию HKT через first-order types?
TOV_MULTIMASSO
И, кстати, есть новости по параметризованным модулям?
Ayrat
Есть у кого ссылка на реализацию HKT через first-order types?
У нас только такие типы и да, можно! Просто будет много object и unsound кастов под капотом
Ayrat
Тебе снипет скинуть?
Ayrat
Lightweight HKT Encoding | F# Snippets http://www.fssnip.net/7Wy/title/Lightweight-HKT-Encoding
Just
Тащить что-то такое в код я б не стал
ой я когда сел разбираться с lambda calculus, занятно, но мозги в трубочку заворачивает
Just
хотя там + и * освоил )
Ayrat
Вообще можно все снипеты этого наркомана посмотреть. Эрика мать его Тсарпалиса
Vladislav
Проще сюда
Ayrat
Проще сюда
А, да. Он же их туда встроил недавно...
Ayrat
Норкоман
TOV_MULTIMASSO
Мда. С таким подходом можно запросто себе в ногу выстрелить
Ayrat
Мда. С таким подходом можно запросто себе в ногу выстрелить
Подразумевается что весь ансаунд под капотом. А для юзера полный фарш в компайл тайме. На инлайнах и сртп
Ayrat
По мне - вырвиглазная говнина
Doge
По мне - вырвиглазная говнина
Проблема в том, что эти хаки становятся вообще не юзабельными если пытаешься даже те же трансформеры и т.п. выразить.
Doge
Так что пользы от такой эмуляции не много
TOV_MULTIMASSO
Вся соль трансформеров в том, что тебе выведение типов помогает. Но тут, я боюсь, оно всё будет в obj выводить
TOV_MULTIMASSO
Ну или я не понял идеи этих хаков
TOV_MULTIMASSO
А, да, я щас посмотрел, там в соответствие App<'f, 'a> ставится некое 'fa
Ayrat
Проблема в том, что эти хаки становятся вообще не юзабельными если пытаешься даже те же трансформеры и т.п. выразить.
А ещё проблема в том, что даже при наличии такой нотации (даже если закрыть глаза на ее уродство), экосистему на нее не перевести, тайп классов-то нет.
Андрей
Только мобил тогда не было :(
Чо отжимали? Сигареты?
Hog
Это на кольце всевластия написано!
😂 отличная идея для гравировки!
Hog
Чо отжимали? Сигареты?
Я был хорошим мальчиком.
Anonymous
Короче я вас понял
Anonymous
F# хорош если без фп головного мозга
Ayrat
F# хорош если без фп головного мозга
Это очень правильный вывод!
Anonymous
Я просто когда начинал писать что то практичное на f# то думал как это все сделать функциональному как покаррировать и тп
Anonymous
Я так понимаю к f# надо относиться как "проще и лучше чем c#" а не "фп аналог c#"
Anonymous
Правильное направление мыслей?
Anonymous
Или может я таки чето не улавливаю
Denis
Надо просто относиться как к инструменту для решения проблем И не пытаться сделать "как правильно и фпшно"
Ayrat
Я так понимаю к f# надо относиться как "проще и лучше чем c#" а не "фп аналог c#"
Лучше пользоваться фшарп фишками, типа DU, рекорды и даже SRTP (но очень аккуратно). Классы очень полезны, интерфейсы полезны. Когда все это совмещаешь, получаешь очень выразительный язык на хорошей экосистеме. Что ещё для счастья надо?
Ilya
Ух, что бан на день с человеком делает!
Denis
Я бы еще добавил что не бояться пользоваться ООП и императивными фишками когда есть необходимость (например, https://gist.github.com/Szer/4e9205946bfb92e41ef657af246c83b4 показывает перфоманс)
Doge
F# хорош если без фп головного мозга
ФП головного мозга хорошо работает только на двух языках из более-менее мейнстрима: хаскель и скала.
Denis
Хорошо оно нигде не работает, в тч и на хаскеле и на скале Ну точнее так, если у кого то где то перекос - то ничего хорошего ждать от этого кода не стоит
Denis
Вообще перекос как в ооп так и в фп обычно хорошим не заканчивается
Doge
Хорошо оно нигде не работает, в тч и на хаскеле и на скале Ну точнее так, если у кого то где то перекос - то ничего хорошего ждать от этого кода не стоит
Ссылочно-прозрачный код имеет гигантское количество преимуществ без особых недостатков (разве что требования к языку больше) и он как раз и является настоящим ФП на максималках. И да, ОО и ФП - это ортогональные концепции. У тебя может быть вполне себе чистый ФП код и ОО в одном и том же месте.
Denis
я говорю о том что упарываться ни по чему не надо)
Критерий
нужно обязательно упороться, потому что если не упороться - никакого чуда не произойдёт
Vladislav
https://github.com/fscx-projects/fscx
Doge
я говорю о том что упарываться ни по чему не надо)
Если ты хочешь ссылочно-прозрачный код (а ты его обычно хочешь, т.к. именно он обладает теми хорошими свойствами за которое и любят ФП), то тебе придется зайти достаточно далеко в плане ФП.
Doge
Другой вопрос, что для этого нужны будут люди в команде, которые знают что они делают и зачем оно все вообще нужно. А то можно получить карго культ как в тех кодовых базах, которыми тут людей пугают.
TOV_MULTIMASSO
У ФП и иммутабельности есть одно преимущество - такой код легче распараллелить.
Критерий
а также дебажить и статически анализировать
TOV_MULTIMASSO
А, ну и монадки позволяют скрыть всю сантехнику и разводку проводов в коде.
Ayrat
У ФП и иммутабельности есть одно преимущество - такой код легче распараллелить.
Ну не, главное поддержка языка. Если язык не позволяет шарить данные, то пусть они хоть сто раз мутабельные.
Критерий
а то когда в какой-то список накидываются разделители, а потом каждому элементу списка назначаются идентификаторы, по которым затем происходит сортировка - очень сложно понять, почему порядок неправильный, пока не замечаешь, что разделители шарятся и, соответственно, идентификаторы перезаписываются
TOV_MULTIMASSO
Я щас пишу граф-редусер, для исполнения скриптового языка, - так вот, я запихал в монаду обработку ошибок и трекинг текущего скоупа. И то, и другое появляется в коде только в нужных местах.
Doge
Ну не, главное поддержка языка. Если язык не позволяет шарить данные, то пусть они хоть сто раз мутабельные.
Всё равно не спасает. Вон, как раз пишу сейчас на расте, которой шаринг и владение отслеживает на уровне языка и многопоточность там прям ощутимо сложнее хаскеля по всем направлениям, как раз из-за мутабельности в том числе.
Shub
https://github.com/Mojang/DataFixerUpper/tree/8b5f82ab78b30ff5813b3a7f3906cd3f4f732acf/src/main/java/com/mojang/datafixers/optics
Doge
https://github.com/Mojang/DataFixerUpper/tree/8b5f82ab78b30ff5813b3a7f3906cd3f4f732acf/src/main/java/com/mojang/datafixers/optics
Ага, на реддите где-то год назад уже пробегало. Посмеялся, но свою работу этот код делает
Shub
профункторы и линзы на жаве для игры-песочницы, лол
Doge
профункторы и линзы на жаве для игры-песочницы, лол
Это вроде часть для обновления мира при переходе с одной версии на другую. Могу предположить, что по каким-то причинам там данные иммутабельны и тогда уже при сложных операций с линзами куда проще будет, чем без них. Несмотря на весь абсурд линз на джаве
Shub
линзы - это ж для глубоко-структурированных данных, а не для иммутабельности
Doge
линзы - это ж для глубоко-структурированных данных, а не для иммутабельности
Для глубокого структурированных иммутабельных данных.
Doge
Если они мутабельны, то можно и без линз жить
Romɑn
https://twitter.com/k_cieslak/status/1218873436992364545?s=19 Даже Кшиштоф подкладывает " бай дизайн "
Doge
https://twitter.com/k_cieslak/status/1218873436992364545?s=19 Даже Кшиштоф подкладывает " бай дизайн "
Так себе бай дизайн с учётом того, что как только в clr появятся hkt и тайпклассы, то они тут же будут в F#
Doge
Ты ничего не понял
Ну я не знаю отсутствие каких фич обсуждают в слаке, но могу предположить
Крылатый
https://twitter.com/MStrehovsky/status/1218966180104458240?s=19