IC
Штатная фича браузеров для создания токсичных мемасиков.
ena
This is haskellru, so the main lang is russian. But lots of guys here speak english good enough.
> This is haskellru, so the main lang is russian. This is haskellru, so the main lang is Haskell.
parket
I thought the main lang was Haskell 😉
parket
Someone else?
parket
He he. Never mind. :)
ena
Awww. So cute :3
ena
Хаскельное сообщество меня продолжает умилять своей вежливостью и отзывчивостью
Nikolay
интерестно для каких целей в основном используют хаскель. могу предполодить, что это не веб разработка. а что тогода? я сам слышал только про проект кардано.
A64m
скорее всего это как раз "веб разработка"
Alexander
Бэкенды. Не знаю, насколько их можно к вебу отнести.
Alexander
можно
Alexander
да что угодно
Alexander
Вот вы тут высказывали мысль, что на динамическия языках писать сложнее (я с этим согласен). Так помимо того, что в вебе много динамических языков, там еще и технологий разных сотни, если не тысячи. Я с трудом понимаю, как веб-разработчики со всем этим живут. Меня чудовищная сложность веба угнетает. Наверное, я так себе разработчик в сравнении с миллионами веб-девелоперов
Alexander
технологии изучаются быстро, в конкретном стеке их не очень много
Alexander
я вот уже полный стэк освоил за 3,5 года
Alexander
3.5 года - это большой срок. Тут общее программирование-то изучаешь, изучаешь, а ему конца и края нет. И я не понимаю, какой набор знаний можно считать "изучил веб"
Alexander
ну веб бесконечен,Ю полностью изучить нельзя
Alexander
срок большой, но полный стэк нужен только на lead позициях
Alexander
можно быть мидлом зная одну конкретную технологию, в некоторых конторах и сеньором можно стать
Igor
Вообще не понимаю эту градацию миддлы, джуниоры, сеньоры
Alexander
общее програмирование в общем то важнее знания стэка
Alexander
джуниор учится, мидл работает, сеньор учит, лид руководит
Alexander
как то так
Alexander
но это условности, обычно это просто разряды
Igor
джуниор учится, мидл работает, сеньор учит, лид руководит
Но ведь, миддл тоже обладает какими-то знаниями, которые он может передавать
Alexander
и джун обладает
Alexander
просто эффективнее идет передача знаний от более опытных людей обычно
Alexander
срок большой, но полный стэк нужен только на lead позициях
Погоди. Вот я, никогда толком вебом не занимавшийся, решаю задачи на бэке и фронте. Но ведь я не знаю почти ничего, я вижу, сколько там лопатить нужно, чтобы одну только связку JS+HTML понимать
Alexander
ну js + html + css это более сложная связка, чем, скажем бэкенд
Igor
Я как-то читал немного другое определение: джун - знает "что" ему нужно сделать в определенной задаче миддл - знает "как" это сделать а сеньор - "зачем" это нужно делать (может и не нужно)
Alexander
ну тоже хорошее
Alexander
но есть один ньюанс, знать что делать сложнее, чем знать зачем
Alexander
обычно что делать лучше всех знает как раз лид
Ilya
Аксиомы моноида совпадают с теми аксиомами, которые накладываются на композицию морфизмов в категории. Отличие состоит в том, что в моноиде определено произведение любых двух элементов, тогда как композиция определена не для любых двух морфизмов. Сказать, что для любых двух морфизмов определена композиция — это то же самое, что сказать «категория состоит из одного объекта», то есть моноиды можно рассматривать как категории из одного объекта.
Alexander
ну js + html + css это более сложная связка, чем, скажем бэкенд
Об этом и речь. А если мы начинаем перечислять подходы, которыми программируется эта связка, тут-то мозг и начинает закипать. Матан проще!
Igor
Имхо, лучше не причислять себя к определенной категории и просто называться "software developer"
Alexander
их все и знать то не обязательно
кана
а значит других объектов нет
кана
ведь если бы был другой объект B, то был бы и морфизм id_b : B -> B, который не композится с A -> A, значит объекта B нет
Alexander
а конкретные подходы это конкретные технологии
Там не просто технологии. Часто вебные технологии еще и разных парадигм придерживаются.
Anatolii
Сейчас @lonokhov будет плюваться, но я взял MonadTime как пример просто:) Вот инстансы MonadTime - https://hackage.haskell.org/package/monad-time-0.3.1.0/docs/src/Control.Monad.Time.html#currentTime Я написал вот такой код и ожидаю что внтури ридера у меня currentTime будет всегда константный, но из-за того что там IO смешан с редиром - currentTime каждый раз возвращает новое время. Мог бы кто-то обьяснить как это возможно поправить? f :: (MonadTime m, MonadIO m) => m () f = do now <- currentTime flip runReaderT now $ f2 print now f2 :: (MonadTime m, MonadIO m) => m () f2 = do now2 <- currentTime putStrLn $ show now2 liftIO $ threadDelay (2000000) now3 <- currentTime putStrLn $ show now3 liftIO $ threadDelay (2000000) now4 <- currentTime putStrLn $ show now4
Alexander
ну вот условно ты только заходишь в js+html, тебе явно скажут "пиши на vue в такой то парадигме"
Alexander
вот тебе vue-bootstrap
Alexander
а выяснять что лучше, vue или react, это уже задача другого уровня и решается она изучением обоих подходов
Aliester
выяснять лучше vue или react это как выяснять лучше отвертка или зубило
Alexander
причем на уровне CTO ответ вообще часто ставит удобство найма людей которые знают конкретные технологии выше чем реальные преимущества
Alexander
всяко более объективная метрика
Alexander
выяснять лучше vue или react это как выяснять лучше отвертка или зубило
при условии что использовать одновременно отвертку и зубило неправильно
Aliester
ну если нужного кого-то в шею пырнуть -оба подойдут
Anonymous
Здравствуйте. А есть ли способ получить конструктор по его имени, если для него нет инстанса Read? Есть необходимость получить по имени конструкторы для Persistent-ских меток полей, например: update userId [UserFirstName =. "Вася"] где UserFirstName это сгенерированная Database.Persistent.TH метка для поля и имеет вид λ> :i UserFirstName data instance EntityField User typ where ... UserFirstName :: typ ~ Text => EntityField User typ ... С горем пополам я нагенерировал Show через TH, но не вижу способа сделать Read для EntityField a b, т.к. не могу сделать constrByName :: String -> EntityField a b constrByName "UserAvatar" = UserAvatar constrByName "UserPhone" = UserPhone ... т.к. • Couldn't match type ‘b’ with ‘Maybe Text’ arising from a use of ‘UserAvatar’ ‘b’ is a rigid type variable bound by the type signature for: constrByName :: forall a b. String -> EntityField a b at src/CustomTH.hs:49:1-41 • In the expression: UserAvatar In an equation for ‘constrByName’: constrByName "UserAvatar" = UserAvatar • Relevant bindings include constrByName :: String -> EntityField a b (bound at src/CustomTH.hs:50:1)
A64m
Здравствуйте. А есть ли способ получить конструктор по его имени, если для него нет инстанса Read? Есть необходимость получить по имени конструкторы для Persistent-ских меток полей, например: update userId [UserFirstName =. "Вася"] где UserFirstName это сгенерированная Database.Persistent.TH метка для поля и имеет вид λ> :i UserFirstName data instance EntityField User typ where ... UserFirstName :: typ ~ Text => EntityField User typ ... С горем пополам я нагенерировал Show через TH, но не вижу способа сделать Read для EntityField a b, т.к. не могу сделать constrByName :: String -> EntityField a b constrByName "UserAvatar" = UserAvatar constrByName "UserPhone" = UserPhone ... т.к. • Couldn't match type ‘b’ with ‘Maybe Text’ arising from a use of ‘UserAvatar’ ‘b’ is a rigid type variable bound by the type signature for: constrByName :: forall a b. String -> EntityField a b at src/CustomTH.hs:49:1-41 • In the expression: UserAvatar In an equation for ‘constrByName’: constrByName "UserAvatar" = UserAvatar • Relevant bindings include constrByName :: String -> EntityField a b (bound at src/CustomTH.hs:50:1)
не понял ничего, что значит "получить конструктор по имени" и зачем Show через TH генерить?
Dmitry
Здравствуйте. А есть ли способ получить конструктор по его имени, если для него нет инстанса Read? Есть необходимость получить по имени конструкторы для Persistent-ских меток полей, например: update userId [UserFirstName =. "Вася"] где UserFirstName это сгенерированная Database.Persistent.TH метка для поля и имеет вид λ> :i UserFirstName data instance EntityField User typ where ... UserFirstName :: typ ~ Text => EntityField User typ ... С горем пополам я нагенерировал Show через TH, но не вижу способа сделать Read для EntityField a b, т.к. не могу сделать constrByName :: String -> EntityField a b constrByName "UserAvatar" = UserAvatar constrByName "UserPhone" = UserPhone ... т.к. • Couldn't match type ‘b’ with ‘Maybe Text’ arising from a use of ‘UserAvatar’ ‘b’ is a rigid type variable bound by the type signature for: constrByName :: forall a b. String -> EntityField a b at src/CustomTH.hs:49:1-41 • In the expression: UserAvatar In an equation for ‘constrByName’: constrByName "UserAvatar" = UserAvatar • Relevant bindings include constrByName :: String -> EntityField a b (bound at src/CustomTH.hs:50:1)
constrByName возвращает значения разных типов. Поэтому она должна быть либо функцией класса, параметризованной этими типами (вроде Read), либо на вход надо типы передавать - вроде (Proxy @a) (Proxy @b)
Anonymous
не понял ничего, что значит "получить конструктор по имени" и зачем Show через TH генерить?
Получить конструктор по имени - значит имея название конструктора "UserName" (значение типа String или Text) получить сам конструктор UserName. Show через TH генерить потому что не нашел других путей.
Dmitry
Вместо "функцией класса, параметризованной этими типами" читать "функцией класса, параметризованнОГО этими типами"
Anatolii
Обыщий смысл я думаю понятен
Anatolii
Как заставить ридерТ вместо ИО использовать
Dmitry
так там не из-за принтов инстанс от IO подтянулся?
Anatolii
Ну в конкретном случае ещё из-за слипов, на практике там ИО откуда угодно потянутся может
Anatolii
Мне хочется во "многих" функциях иметь одинаковое время
Dmitry
как я понимаю MonadTime, если в монадном стеке где-то будет стоять ReaderT UTCTime, то он будет его оттуда брать. А если нет, то будет выбирать новый.
Dmitry
Ну, а инициализировать время, как полагается - либо при запуске ридера, либо через local
Anonymous
а почему дерайвинг Show для этих типов не работает?
Типы нагенерированы персистентским TH, это модели базы данных. Я не знаю как не используя TH задерайвить для них Show. Вот допустим если у меня есть share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| User json sql=users avatar Text Maybe firstName Text middleName Text lastName Text email Text createdAt UTCTime default=now() updatedAt UTCTime default=now() UUniqueEmail email deriving Show Read Eq Generic Typeable Data |] Как мне сделать deriving чтобы когда я добавляю новые поля в модель, добавляю новые модели - у меня всгда работал бы show для любого поля?
Anonymous
для любого поля - это для любого EntityField a b, которое создается из этого описания.
кана
так там не из-за принтов инстанс от IO подтянулся?
нет, в универсуме print :: MonadIO m => m ()
кана
проблема выше решается ньютайпом над ридерт (без overlappable) или орфан-инстансом MonadTime для ReaderT (опять же без оверлапабл), но это чет делает этот инстанс вообще бесполезным в любом нечистом стеке
кана
то есть по дефолту между reader/io monad-time выбирает io можно сместить приоритет в пользу ReaderT через орфан/ньютайп: instance Monad m => MonadTime (ReaderT UTCTime m) where currentTime = ask он такой же как и в monad-time, просто без OVERLAPPING
кана
кана
при этом обратится к действительно текущему времени можно будет через liftIO currentTime
кана
зачем вообще ReaderT UTCTime инстанс кому-нибудь может пригодится я вообще хз