Ale
Умение создать объект, невыразимый через теорию категорий я бы не назвал хорошей практикой для программиста
так есть конкретный пример алгоритма, который выразим функционально и невыразим оопшно?
Дима
А где там мутабельность?
ST — это структура, позволяющая делать мутабельные операции
Anonymous
https://wiki.haskell.org/Mutable_variable
Anonymous
не благодарите
Vladimir
Это же монада, не?
Дима
так есть конкретный пример алгоритма, который выразим функционально и невыразим оопшно?
Да, Tardis — это это структура, позволяющая отправлять объекты в будущее и в прошлое программы
Anonymous
ну сайдэффекты io тоже завернуты в монады
Vladimir
Ну в этом и суть монад
Anonymous
как бы это и преимущество фп
Anonymous
да
Vladimir
Что они заменяют сайд эффекты
Ale
* что ими описываются эффекты
Дима
Нет, лол)
Дима
Сайд эффекты можно описывать отдельно
Vladimir
* что ими описываются эффекты
Нет, именно заменяют
Дима
Для начала, в purescript например есть (была) структура Eff
Владимир
Что значит заменяют?
Ale
Нет, именно заменяют
не улавливаю, заменяют явный вызов?
Дима
Которая именно представляла сайд-эффект
Дима
Да ничего не значит
Дима
Допустим, что у нас есть какой-то js код с сайд-эффектами, который мы хотим вызывать из нормального ™ языка // Main.js exports.pushTheButton = function() { console.log('nuclear missile launched') } Чтобы различать разные сайд-эффекты, каждый из них можно задать как отдельный тип. Присутствует тип в сигнатуре функции — значит эта функция повлечёт за собой данный побочный эффект module Main where import Control.Monad.Eff(Eff, kind Effect) import Control.Monad.Eff.Console (logShow, CONSOLE) import Prelude (Unit, discard) foreign import data NUCLEAR_MISSILE :: Effect foreign import pushTheButton :: forall e. Eff ( launch :: NUCLEAR_MISSILE | e ) Unit main :: Eff ( console :: CONSOLE, launch :: NUCLEAR_MISSILE ) Unit main = do pushTheButton logShow "its fine" -- Results: -- nuclear missile launched -- its fine
Дима
Вот это — описание тпипзации сайд-эффектов
Дима
А монады конечно нифига ничего не заменияют
Дима
А оборачивают
Vladimir
Ну значит что нет возможности явно вызвать сайд эффект кодом, синхронно
Дима
Лол
Anonymous
можно
Дима
Что же я только что выше сделал, дайте подумать
Ale
как бы это и преимущество фп
а фп тут просто потому что так в хаскеле?
Vladimir
Ну так это do
Anonymous
я не понял вопрос
Anonymous
Ну так это do
так и что?
Дима
Ну так это do
Это компилируется в синхронный вызов, просто сначала дергается первая функция, потом вторая
Дима
Тут несколько сложнее концепция, короче
Roman
использует уже кто GraphQL?
Владимир
В любом случае ты делаешь что-то если юзер держит кнопку. Можешь описать это монадой, можешь - переменной, можешь - методом класса
Vladimir
Не, компилироваться оно может во что угодно, это вопрос семантики
Ale
я не понял вопрос
развернув вопрос по-другому “причем фп к монадам?"
Anonymous
развернув вопрос по-другому “причем фп к монадам?"
я не знаю. я выхватываю фразы из чата и придираюсь. как обычно
Vladimir
То есть семантически если вызвать функцию, то это никогда не приведет к эффектам сразу после возврата
Anonymous
но наверное Дмитрий знает ответ
Anonymous
еще можно Громова позвать)
Anonymous
чтобы было совсем весело (но недолго)
Anonymous
или просто с этим всем в фп чат прийти
Anonymous
у него забомбит сразу же
Artur
Лучше бы бухали)
Владимир
А кто нет?
Anonymous
Лучше бы бухали)
это и делаю
Vladimir
Ну да, его вроде как и нет вообще
Vladimir
Потому что все декларативное
Anonymous
в императивщине только он и есть
Anonymous
Дима
😄
Yuriy
или просто с этим всем в фп чат прийти
А можно ссылку на чат по ФП?
Anonymous
https://t.me/frp_ru
Yuriy
Спасибо!
Artur
это и делаю
Вот в тебе, кстати, ни разу не сомневался)
Anonymous
😎
Николай
Всем привет. Вопрос ночи) Как с точки реалиции сделать лучше, каждый раз открывать соединение к монго при запросе ( http://joxi.ru/xAebYYjcYlJzgr ) , или же лучше один раз открыть и делать запросы? Суть в том что для каждого маршрута свой файл, и в каждом файле запросы к БД
Max
коннект лучше же шарить
Николай
@shammasov пример можно?) плз)
Max
и лучше бы отделить обработку запроса от работы с бд
Max
const makeDAO = connection => ({ getUser: (id) => {} getFeatures: (param1, param2) => {} })
Max
а коннекшен делай в одном месте и следи за ним в одном месте
Max
в обработке реквеста дёргай дао
Vl
Всем. Хай. Решил вот упростить себе задачу. Да и может еще кому-то помочь. И пилю свой велосипед MySQL ORM аналог Yii2 ActiveRecord Как считаете, нормальная ли структура описания модели?
сomorsiс
sequelize не зашел?
Vl
Вообще
Vl
Таких вот плюшек хочется.
сomorsiс
почему?
Vl
Есть ли вообще резон двигаться в этом направлении. Полезно ли это как идея?
Vl
Таких вот плюшек хочется.
там не ['user'] а ['profile']
сomorsiс
а зачем разбивать описание колонок на 2 места?
сomorsiс
типы будут без автодополнения, если задаются как строки
сomorsiс
и вообще стоит еще раз посмотреть на sequelize