Ale
Anonymous
https://wiki.haskell.org/Mutable_variable
Anonymous
не благодарите
Vladimir
Это же монада, не?
Anonymous
ну сайдэффекты io тоже завернуты в монады
Vladimir
Ну в этом и суть монад
Anonymous
как бы это и преимущество фп
Anonymous
да
Vladimir
Что они заменяют сайд эффекты
Ale
* что ими описываются эффекты
Дима
Нет, лол)
Дима
Сайд эффекты можно описывать отдельно
Vladimir
Дима
Для начала, в purescript например есть (была) структура Eff
Владимир
Что значит заменяют?
Дима
Которая именно представляла сайд-эффект
Дима
Да ничего не значит
Дима
Допустим, что у нас есть какой-то 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
можно
Дима
Что же я только что выше сделал, дайте подумать
Vladimir
Ну так это do
Anonymous
я не понял вопрос
Anonymous
Дима
Ну так это do
Это компилируется в синхронный вызов, просто сначала дергается первая функция, потом вторая
Дима
Тут несколько сложнее концепция, короче
Roman
использует уже кто GraphQL?
Владимир
В любом случае ты делаешь что-то если юзер держит кнопку. Можешь описать это монадой, можешь - переменной, можешь - методом класса
Vladimir
Не, компилироваться оно может во что угодно, это вопрос семантики
Дима
Vladimir
То есть семантически если вызвать функцию, то это никогда не приведет к эффектам сразу после возврата
Anonymous
но наверное Дмитрий знает ответ
Anonymous
еще можно Громова позвать)
Anonymous
чтобы было совсем весело (но недолго)
Anonymous
или просто с этим всем в фп чат прийти
Anonymous
у него забомбит сразу же
Artur
Лучше бы бухали)
Владимир
А кто нет?
Anonymous
Ale
Vladimir
Ну да, его вроде как и нет вообще
Vladimir
Потому что все декларативное
Anonymous
в императивщине только он и есть
Ale
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
Есть ли вообще резон двигаться в этом направлении. Полезно ли это как идея?
сomorsiс
а зачем разбивать описание колонок на 2 места?
сomorsiс
типы будут без автодополнения, если задаются как строки
Sergey
сomorsiс
и вообще стоит еще раз посмотреть на sequelize
Vl